php中的隐式类变量声明?

时间:2010-06-25 02:06:53

标签: php class variables declaration

我一直在查看一些代码,并且很难在php类中编写变量声明。具体来说,我正在看的代码似乎没有在使用它们之前声明类变量。现在这可能是预期的,但我找不到任何表明它是可能的信息。所以你期待这个:

class Example
{

    public function __construct()
    {
        $this->data = array();
        $this->var = 'something';

    }

}

上班?这是否会在以后要使用的类实例上创建这些变量?

3 个答案:

答案 0 :(得分:4)

这与普通变量声明的工作方式相同:

$foo = 'bar'; // Created a new variable

class Foo {
    function __construct() {
        $this->foo = 'bar'; // Created a new variable
    }
}

PHP类与其他语言不完全相同,其他成员变量需要指定为类声明的一部分。可以随时创建PHP类成员。

话虽如此,你应该在类声明中声明类似public $foo = null;的变量,如果它应该是类的永久成员,则清楚地表达意图。

答案 1 :(得分:2)

那么你期望这个:(代码样本)能够工作吗? 是。这是非常糟糕的做法(至少它让我的C ++皮肤爬行),但它丝毫不会让我感到惊讶。有关使用另一个而未预先声明它的示例,请参阅下一页中的示例2。 http://www.php.net/manual/en/language.oop5.basic.php如果启用了E_STRICT,则会抛出错误。

这是否会在以后要使用的类实例上创建这些变量?

是的。 PHP不是很有趣吗?来自C ++ / C#背景,PHP花了很长时间才在我身上发展,因为它非常宽松,但它有其优点。

答案 2 :(得分:1)

这完全是功能性的,但意见会有所不同。由于类成员变量的创建在构造函数中,因此它们将存在于对象的每个实例中,除非被删除。

通常使用信息性注释来声明类成员变量:

class Example
{
    private $data;  // array of example data

    private $var;   // main state variable

    public function __construct()
    {
        $this->data = array();
        $this->var = 'something';
    }
}