在PHP中访问父变量内容

时间:2012-05-14 17:03:52

标签: php oop

我正在尝试在PHP中访问父类的内容,但出于某种原因,它似乎并不想通过。我对OOP很新,所以如果有任何建议,请告诉我。以下是我的代码:

class baseQuery {
    public static $numbers = "(1, 2, 3, 4, 5, 6, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 32, 39, 50, 52, 72, 109, 110, 850, 1839, 1968, 1969, 1970, 1972, 1973, 2364, 2365, 3009)";
}

class specificQuery extends baseQuery {
    public function __construct() {
        $numbers = $this->numbers;
    }
    public function test() {
        echo $numbers; //fails
    }
}

4 个答案:

答案 0 :(得分:2)

如果要访问静态成员,则需要使用以下语法:

self::$varname

您可以使用实际的类名而不是self来执行相同的操作。就php而言,您的test()方法正在尝试访问您尚未声明的名为$numbers的变量。如果您不使用$this->self::语法,那么PHP假定它是本地的(或者,如果您真的很危险,则是全局变量)。

答案 1 :(得分:1)

您应该阅读"Late Static Bindings"。基本上,您可以使用static关键字访问numbers属性。

class specificQuery extends baseQuery {
    public function test() {
        echo static::$numbers;
    }
}

我喜欢使用static over self,因为如果你在扩展原始类的类中设置$ numbers,它将被访问而不是基类。

答案 2 :(得分:0)

在第二个扩展原始类的类中,你要设置一个常规变量,你需要将它存储在某个地方。

尝试在第二个类中分配一个新的公共变量,将数字存储给他,然后在函数中显示它。

答案 3 :(得分:0)

class baseQuery {
    public static $numbers = "(1, 2, 3, 4, 5, 6, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 32, 39, 50, 52, 72, 109, 110, 850, 1839, 1968, 1969, 1970, 1972, 1973, 2364, 2365, 3009)";
}
class specificQuery extends baseQuery {
    public function __construct() {}

    public function test() {
        echo self::$numbers; // works :)
    }
}