How are variables assigned in PHP classes?
本问题已经有最佳答案,请猛点这里访问。
我在CodeAcademy做了一个与PHP中的对象相关的练习。它要求我在类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php class Cat { public $isAlive = true; public $numLegs = 4; public $name; public function __construct( $name ) { $this->name = $name; } public function meow() { return"Meow meow." . $this->name .""; } } $cat1 = new Cat("CodeCat" ); echo $cat1->meow(); ?> |
这条
Is this public $name; line actually needed? ... If I comment out the
public $name; line, then this does not affect the result.
PHP将根据请求在对象上创建属性,即使您从未正式声明过这些属性。
1 2 3 4 5 | Class Thing{} $a = new Thing(); $a->name = 'John'; echo $a->name; // John echo $a->age; // doesn't break script but PHP gives 'Notice: undefined property' |
在这里运行
所以您的代码以任何方式运行,因为当您将其设置为
这种代码设计(使用属性而不声明它们)是一种糟糕的习惯,原因包括:
- 对于那些想使用或与您的代码交互的人来说,这是一场噩梦。
- 如果你处理的不仅仅是一个非常简单的脚本,那对你来说就是一场噩梦。在大型应用程序中,不可能知道此
Cat 实例是否有名称?,这个实例怎么样?,它还有什么其他属性?如果您在不同的函数中动态添加属性,或者更糟的是,在不同的文件中动态添加属性,这些问题都不容易回答。 - 调用代码不能保证属性的存在,因此您的程序可能会有更多的错误。
- IDES和代码编辑器无法知道对象的形状,因此无法使用强大的工具。您的脚本需要更长的时间来编写
公共变量允许您直接将它们修改为字段,而不是通过公共方法。添加以下行:
1 2 3 4 5 | $cat1 = new Cat("CodeCat" ); echo $cat1->meow(); $cat1->name ="Another Cat"; echo $cat1->meow(); |
你会看到:
1 2 | Meow meow. CodeCat Meow meow. Another Cat |
您甚至可以在构造之后更改$name的值。
私人财产:将$name的访问器从public更改为private,将出现以下错误:
1 | Fatal error: Cannot access private property Cat::$name |
当试图从$cat1对象给它赋值时。