所以我遇到了这样的代码,它使用了一个名为 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 的“动态/松散类型”特性或其他因素有什么关系吗?
最佳答案
属性可以动态定义,它们的可见性默认为公开,如下例所示:
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()
,就会报错(undefined property),因为变量还没有定义除了在 test()
函数中。
实例
关于PHP 属性不存在但使用时没有抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50723058/