[英]PHP: access static member of class from instance in local class member
我想這樣做:
class A {
public static $var = 'foo';
}
class B {
private $a;
public function __construct($a) {
$this->a = $a;
}
public function f() {
echo $this->a::$var; // <---- ERROR
echo get_class($this->a)::$var; // <---- ERROR
// WORKING but awful
$a = $this->a;
echo $a::$var;
}
}
$b = new B(new A());
$b->f();
請注意,我不知道$a
是A
還是另一個類的實例,我只知道它具有靜態的$var
成員。 因此,不幸的是,我不能在f
內使用A::$var
。
有誰知道使用PHP 5.3+是否有單表達式語法來做到這一點?
您正在將A的實例傳遞給B,但是$ var是A的靜態成員,只能使用::來訪問A,例如$:。
private function f() {
echo A::$var;
}
編輯:如果要使其依賴於$ a中存儲的實例,則可以執行以下操作:
public function f() {
$class = get_class($this->a);
echo $class::$var;
}
我首先看到的是您無法調用f(),因為它是私有的。
$b->f();
那么也許您可以轉向這樣的事情?
class B extends A{
private $a;
public function __construct($a) {
$this->a = $a;
}
public function f() {
echo static::$var;
}
}
以下將起作用,但我想問為什么要這樣做:
class A {
public static $var = 'foo';
}
class B {
private $a;
public function __construct($a) {
$this->a = $a;
}
public function f() {
if ($this->a instanceof A) {
echo A::$var;
}
}
}
$b = new B(new A());
$b->f();
您不需要使用$ this-> a專門做任何事情,因為$ var對於該類是靜態的。
您可以編寫如下函數:
function get_static_property($class, $property) {
return $class::$$property;
}
我忍不住想知道為什么您需要這個。 為什么沒有A實現接口的任何原因? 還是使用特質? 這樣,您可以只回顯$this->a->someMethodName()
。
PS。 返回字符串通常比在內部方法中回顯更可取。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.