2011-05-17 69 views
0

我想知道为什么PHP语言允许在大多数语言需要在类声明本身内定义属性时使用隐式属性声明(请参阅下面的代码)。这种类型的编码风格有实际用途吗?为什么在PHP中使用隐式属性声明?

$user1 = new User(); 
$user1->name = "Kylie"; 
echo $user1->name; 

class User{} 
+0

可能重复的[隐式类变量声明在PHP?](http://stackoverflow.com/questions/3115115/implicit-class-variable-declaration-in-php) – 2011-05-17 07:58:38

+3

大多数非编译/脚本语言允许。在PHP中,字典('array')是一个基本的数据类型,并且是早期对象系统的子结构。这就是语言的设计。 – mario 2011-05-17 08:00:19

回答

4

用例是值对象

$a = new stdClass; 
$a->something = 12; 
$a->somethingElse = 'Hello World'; 
myFunction ($a); 

这允许创建一些对象,只需随身携带的结构化数据(像其他语言structs),而不需要定义一个类为了它。

另一点是,因为PHP无论如何都是弱类型的 - 没有真正的理由来禁止它。如果你需要更强烈的东西,overweite __set()

public function __set ($propertyName, $value) { 
    throw new Exception("Undefined Property $propertyName"); 
} 
+0

我更想知道PHP为什么不强制程序员在初始化之前定义类定义中的属性。隐性财产申报是否有益并在运行中创建它们? – locoboy 2011-05-17 07:59:13

+0

好处(也许你还没有看到我的编辑之一;))是,你有时根本不需要声明类,因为如果你需要一个没有任何行为的结构(〜= methods),你可以例如'stdClass'。但是,我没有看到任何缺点^^ – KingCrunch 2011-05-17 08:03:03

1

尝试禁用警告抑制和这样的声明不会显得那么含蓄了))

+0

只是再次测试;)它的错误。 'error_reporting(E_ALL | E_STRICT); class B {} $ b = new B; $ b-> x = 12;' – KingCrunch 2011-05-17 08:06:32

1

我会说这是来自PHP已经和仍然相当宽松关于它的数据类型,并且保留至少一点向下兼容性,这些脚本已经在早期的PHP版本(< 5)中编写过。

相关问题