簡體   English   中英

PHP:從擴展類的方法訪問父的靜態變量

[英]PHP: access a parent's static variable from an extended class' method

仍然試圖在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();
?>

我認為這可以從其他語言的經驗中發揮作用。

在父級中聲明屬性是完全無關緊要的,您可以像訪問任何靜態屬性一樣訪問它:

self::$base_url

要么

static::$base_url  // for late static binding

是的,這是可能的,但實際上應該這樣寫:

class dostuff extends config {
   public static function get_url(){
      echo parent::$base_url;
    }
}

但在這種情況下,您可以使用self::$base_urlstatic::$base_url訪問它 - 因為您不在擴展類中重新聲明此屬性。 你這樣做了,會有一個區別:

  • self::$base_url總是引用行寫的同一個類中的屬性,
  • static::$base_url到對象所屬類的屬性(所謂的'后期靜態綁定')。

考慮這個例子

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM