我正在尝试在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
}
}
答案 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 :)
}
}