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



为什么我们可以实例化不存在的变量?在类上声明所有的属性,然后给它赋值,这有什么不同呢?

class hello {
    public function __construct($db) {
        $this->db = $db;
    }
    public function set($db) {
        $this->db = $db;
    }
    public function get() {
        return $this->db;
    }
}

这与使用不存在的变量不太一样——不存在的变量在PHP中会引发一个通知。在您的示例中,$this已经存在,因此在其上设置属性只是悄悄地为您的对象创建一个public属性。它更像是一个数组,您可以向其中添加一个新的键值对——您也不会期望这会引发一个通知。

如果你事先知道你需要什么属性,那么是的,一定要显式声明它们。在这种情况下,你可能想让它是protected,如果你不声明,你不会得到它。(通常人们在这里使用private,这意味着子类不能访问属性-尽管如果你想强迫后代使用getter,这是可以的)。

如果您事先不知道要存储哪些属性,那么向对象添加属性的灵活性可能会很有用。例如,一些orm对所有表使用一个类,该类的一个实例用于存储一行的列值对。

最新更新