仍然试图在PHP5中找出oop。问题是,如何从扩展类的方法访问父的静态变量。示例如下。
<?php
error_reporting(E_ALL);
class config {
public static $base_url = 'http://example.moo';
}
class dostuff extends config {
public static function get_url(){
echo $base_url;
}
}
dostuff::get_url();
?>
我认为这可以使用其他语言的经验。
答案 0 :(得分:8)
在父级中声明属性是完全无关紧要的,您可以通过访问任何静态属性的方式访问它:
self::$base_url
或
static::$base_url // for late static binding
答案 1 :(得分:5)
是的,这是可能的,但实际上应该这样写:
class dostuff extends config {
public static function get_url(){
echo parent::$base_url;
}
}
但是在这种情况下,您可以使用self::$base_url
和static::$base_url
访问它 - 因为您没有在扩展类中重新声明此属性。你这样做了,会有区别:
self::$base_url
总是引用与该行相同的类中的属性static::$base_url
到对象所属类的属性(所谓的'后期静态绑定')。考虑这个example:
class config {
public static $base_url = 'http://config.example.com';
public function get_self_url() {
return self::$base_url;
}
public function get_static_url() {
return static::$base_url;
}
}
class dostuff extends config {
public static $base_url = 'http://dostuff.example.com';
}
$a = new config();
echo $a->get_self_url(), PHP_EOL;
echo $a->get_static_url(), PHP_EOL; // both config.example.com
$b = new dostuff();
echo $b->get_self_url(), PHP_EOL; // config.example.com
echo $b->get_static_url(), PHP_EOL; // dostuff.example.com