2014-04-30 75 views
0

我有兩個類。 B類有場:A類對象(構圖關係)。有必要獲得A類的靜態變量。但代碼中存在一些問題:訪問靜態變量屬於其他類中的類

<?php 
class A { 
    public static $var = 'a'; 
} 

class B { 
    private $object; 

    private function staticAccess($className) { 
     $this->object = $className; 
    } 

    public function __construct() { 
     $this->staticAccess('A'); 
     // This is wrong syntax: 
     //$a = $this->object::$var; 

     // Syntax which works but unconvenient 
     $objA = $this->object; 
     $a = $objA::$var; 
    } 
} 

正如您所看到的,有一種解決方案。但是有必要寫出更多的線。是否有可能在一行中解決任務?

謝謝你的幫助!

回答

1

這是不可能在一行(只是一個PHP的約束)。我建議添加一個可以使用的功能,如下所示:

public function getStaticVar($var) { 
    $class = new ReflectionClass($this->object); 
    $value = $class->getStaticPropertyValue($var); 

    return $value; 
} 

使用Reflection庫是在PHP中動態訪問動態靜態屬性的唯一方法。

+0

使用反射更好的解決方案?在我的解決方案中沒有反思。但我建議反思更好,因爲它使動態操作更加清晰。 – VladimirS

+1

反射允許您將此抽象爲一種方法。你的語法可以工作,但不適用於變量屬性名稱。反射也更清晰:) –