2014-03-04 175 views
0

我正在尋找更好地瞭解靜態方法如何在php中工作。我一直在閱讀關於static keyword的php手冊網站的文章,內容涉及方法和類對象,我對某些東西感到好奇。PHP和靜態類方法

可以說我有這個類:

class Something{ 
    protected static $_something = null; 

    public function __construct($options = null){ 
     if(self::$_something === null && $options != null){ 
      self::$_something = $options 
     } 
    } 

    public function get_something(){ return self::$_something } 
} 

所以你實例化這個上index.php,所以你做這樣的事情:

$class_instantiation = new Something(array('test' => 'example')); 

大,在這一點上$_something包含key=>value陣列,在這同一頁我們可以做:

var_dump($class_instantiation->get_something()); // var dumps the array we passed in. 

如果我們現在創建sample.php做:

$class_instantiation = new Something(); 
var_dump($class_instantiation->get_something()); 

我們得到null回來(我假設你去index.php,實例化的類和數組中傳遞,只見var_dumpTHEN導航至sample.php。這是可以理解如何將返回null,如果你只去sample.php沒有首先去index.php

我認爲靜態方法是「保存跨類的所有實例」,所以我應該能夠實例有或不具有傳遞到構造一個對象的類,假設的東西是存在的,找回我的陣列,我們對index.php

創造所以我的問題是:

如何靜態方法真的來講工作班?如果我只是傳遞對象,是否有辦法做到我正在嘗試使用第三方工具?

+1

靜態屬性意味着有永遠只能是財產的一個'instance'不管是誰很少或多少你創建的類的實例;和static!== persistent –

+0

另外作爲一個側面說明,最好使用'static ::'而不是'self ::'。 – Mahdi

回答

1

跨相同的PHP執行靜態屬性是static。如果你在index.php上運行它,那麼在執行結束時它會被銷燬。在sample.php這將是一個新的執行。這工作像您期望的(同一個執行):

//index.php 
class Something{ 
    protected static $_something = null; 

    public function __construct($options = null){ 
     if(self::$_something === null && $options != null){ 
      self::$_something = $options ; 
     } 
    } 

    public function get_something(){ return self::$_something; } 
} 

$class_instantiation = new Something(array('test' => 'example')); 
var_dump($class_instantiation->get_something()); 

$class_instantiation2 = new Something(); 
var_dump($class_instantiation2->get_something()); 

兩個objects轉儲:

array(1) { 
    ["test"]=> 
    string(7) "example" 
} 
+0

所以這不能用於多個「頁面」,所以'樣本。php''不能調用'$ class_instantiation = new Something(array('test'=>'example'));'並且得到與'index.php'相同的數組? – user3379926

+0

是的,如果你傳遞相同的數組,它會得到相同的結果,但那不是你在做什麼。 'static'屬性會被破壞,所以你必須重新傳入數組。 – AbraCadaver

1

static在PHP中也意味着您可以訪問屬性/方法而不會使該類不安裝。在相同的PHP執行中很難保持變量,因爲通常您的執行將以服務器響應結束,但如AbraCadaver所述,它們按照您的預期在相同的執行中發揮作用(相同請求,以這種方式讀取)