如何在PHP的构造函数中初始化变量

4 php constructor

我正在编写这个简单的代码,但不知道构造函数的问题是什么:

class Animal {
    public $_type;
    public $_breed;

    public function __construct ($t, $b) {
        echo "i have initialized<br/>";

        $this ->_type = $t; 
        $this ->_breed = $b;
        echo "type is " .$_type. "<br/>";

        echo "breed is " .$_breed. "<br/>";
    }

    public function __destruct () {
        echo "i am dying";
    }
}

$dog = new Animal("Dog", "Pug");
Run Code Online (Sandbox Code Playgroud)

Jer*_*dev 5

为什么后面有空格$this?删除空间。
另外,$this在调用变量时添加。

class Animal {
    public $_type;
    public $_breed;

    public function __construct ($t, $b) {
        echo "i have initialized<br/>";

        $this->_type = $t; // <-- remove space
        $this->_breed = $b;  // <-- remove space
        echo "type is " .$this->_type. "<br/>"; // <-- add $this

        echo "breed is " .$this->_breed. "<br/>"; // <-- add $this
    }

    public function __destruct () {
        echo "i am dying";
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 不管 $this 后面是否有空格 (2认同)

Mat*_*ude 5

您初始化它们很好,但检索它们是错误的......

由于$_type和 的$_breed作用域是对象级别,因此您需要告诉 PHP 您在哪个作用域中引用它们。

因此,代替

echo $_breed;
Run Code Online (Sandbox Code Playgroud)

你需要

echo $this->_breed;
Run Code Online (Sandbox Code Playgroud)

顺便说一句,现在在变量名前加上 _ 是非常奇怪的做法,如果它们是公共变量则更是如此。这可能会让使用您的代码的其他开发人员感到困惑。