Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么我们可以使用$this实例化不存在的变量_Php - Fatal编程技术网

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

Php 为什么我们可以使用$this实例化不存在的变量,php,Php,为什么我们可以实例化不存在的变量?当声明类上的所有属性并为其赋值时,有什么不同 class hello { public function __construct($db) { $this->db = $db; } public function set($db) { $this->db = $db; } public function get() { return $this->db

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

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
属性。它更像是一个数组,您可以向其中添加一个新的键值对—您也不会期望它引起注意

如果您事先知道需要什么属性,那么是的,请明确声明它们。在这种情况下,您可能希望它受到
保护
,如果您不声明,就不会得到它。(人们通常在这里使用
private
,这意味着子类无法访问该属性——不过如果您想强制子类使用getter,也可以)


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

这就是php的自由。它不是很干净,但很管用。这就是php和其他严格类型保存语言(如java或c#)之间的区别。我认为这是出于容错的原因。我们可以杀人,但我们遵守法律。