2013-05-30 32 views
3

我想從類PHP獲得價值,而不需要初始化這個類。 爲此我給出了這個類的文件路徑,供它審查,但沒有初始化。來自文件的反射類PHP?

我的想法:

<?php 
$reflection = new ReflectionClass('/var/www/classes/Base.php'); 
$version = $reflection->getProperty('version')->getValue(); 

if($version >= 1) 
{ 
    return true; 
} 
return false; 
?> 

BASE.PHP

<?php 
class Base 
{ 
    private $version = 2; 
} 
?> 
+0

讓我們知道它是否可以在您嘗試時使用? – Orangepill

+2

你想做什麼?爲什麼不把它變成一個公共常量? – Brad

+2

如果你這樣做的性能,你應該知道,加載'Reflection'是** **的方式不是簡單地創建類,獲取屬性,然後將其刪除較重。 – h2ooooooo

回答

1

什麼是靜態?它更簡單:

<?php 
class Base 
{ 
    public static $version = 2; // or $version = array(1,2,3); 
} 

if(is_array(Base::$version)) { 
    print_r(Base::$version); 
} else { 
    echo Base::$version; 
} 

?> 
+2

...並要求您知道班級的確切名稱。 –

+0

@SébastienRenauld沒有任何比你的解決方案。以下將輸出'2':class Base {public static $ version = 2; } $ o = new Base;的print_r($Ø:: $版);'。你只需要知道它是靜態的! – rixo

1

帶有getter的受保護變量如何?

class Base { 
    protected $version = array(2,3,4,5,6); 
    public function __version() { return $this->version; } 
} 

你可以在任何你喜歡的地方實例化,或者擴展它來爲它添加功能。該版本將在任何擴展中保持不變,所以請牢記這一點。

用法與$yourClass->__version()一樣簡單。將其命名爲類似於魔術方法的名稱以防止函數名稱衝突。如果需要,可以通過擴展重新定義它。