PHP:从扩展类的方法访问父的静态变量

时间:2013-12-19 10:54:27

标签: php class oop variables static

仍然试图在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();
?>

我认为这可以使用其他语言的经验。

2 个答案:

答案 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_urlstatic::$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