所以我遇到了这样的代码,它使用了一个名为testObj
的Bar类属性,虽然它没有定义,所以我预计这是错误的,但我测试了它自己的没有错误:
<?php
class Foo{
public function __construct()
{
echo 'Echo From Foo';
}
}
class Bar{
public function __construct(Foo $foo)
{
$this->testObj = $foo;
}
}
$bar = new Bar(new Foo);
为什么会这样?这是否与PHP的动态/松散类型&#34;或其他什么有关?
答案 0 :(得分:2)
属性可以动态定义,其可见性默认为公开,如下例所示:
class X {
public function test()
{
$this->y = 'test';
}
}
$x = new X();
$x->test();
echo $x->y; // test
你也可以不在课堂上这样做,所以如果我想添加另一个属性,我可以这样做:
class X {
public function test()
{
$this->y = 'test';
}
}
$x = new X();
$x->test();
echo $x->y; // test
$x->z = 'blah';
echo $x->z; // blah
请记住,当实例化一个类时,它只是一个可以像任何其他对象一样被操纵的对象。
注意:如果我不在上面的代码中调用test()
,则会导致错误(未定义的属性),因为该变量尚未定义,除非在test()
功能。
直播示例
答案 1 :(得分:1)
这是完全正常的,您可以动态地将每个项目分配给PHP类而不会出错。事件,如果您应该正确声明它以跟踪您的对象结构。 如果你想让它抛出一个错误,你可以使用__get魔术函数和ReflectionClass来确定属性的设置,即使我没有看到这样做的任何优点,你也无法设置。