PHP 属性不存在但使用时没有抛出错误

标签 php oop

所以我遇到了这样的代码,它使用了一个名为 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() 函数中。

实例

Repl

关于PHP 属性不存在但使用时没有抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50723058/

相关文章:

java - 放入 util 类的适当方法?

php - 我应该如何 PHPDoc 回调?

php - 如何使 laravel 护照中用户的所有 token 无效?

php - 查询未发送到数据库

java - 对象数组的初学者混淆

c# - 我的 OOP 设计是否正确?

javascript - javascript 中的面向对象设计和 'this' 指针

php - 如何执行那么长的php Rets?

php - 压缩 HTML/PDF,存储为 Blob

oop - OO 与分层;平衡 "OO purity"和完成任务