[英]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_url
和static::$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.