为什么我们可以使用$ this来实例化不存在的变量

时间:2014-05-31 10:15:48

标签: php

为什么我们可以实例化不存在的变量?在类上声明所有属性然后为其赋值时有什么不同。

class hello {

    public function __construct($db) {
        $this->db = $db;
    }

    public function set($db) {
        $this->db = $db;
    }

    public function get() {
        return $this->db;
    }

}

1 个答案:

答案 0 :(得分:0)

这与使用不存在的变量不完全相同 - 不存在的变量将在PHP中引发通知。在您的情况下,$this已经存在,因此在其上设置属性只是悄悄地为您的对象创建public属性。它更像是一个数组,你可以添加一个新的键值对 - 你也不希望它发出通知。

如果您事先知道需要哪些属性,那么是的,请明确声明它们。在这种情况下,您可能希望这是protected,如果您没有声明,则不会得到private。 (通常人们在这里使用{{1}},这意味着子类无法访问该属性 - 尽管如果您想强制后代使用getter,这没关系。)

如果您事先不知道要存储哪些属性,则可以灵活地向对象添加属性。例如,某些ORM对所有表使用一个类,该类的实例用于存储行的列值对。