2011-11-30 25 views
0

所以我知道我可以使用__callStatic(),以允許:多重載在PHP

Example::test(); 

工作過......但我在想,如果有可能超載

Example::test->one() 
Example::test->two() 

是這可能在所有與PHP?如果有的話,是否有人有一個工作的例子

還是有人知道工作?

編輯

思考爲什麼我想要做到這一點我想補充一些更多的細節和它的基本原因我有一個API與已經像api.method.function方法和要構建一個簡單的腳本來與該API進行交互。

也有一些方法,這些方法只是api.method

回答

4

引述手冊:

__callStatic()在靜態情況下無法訪問調用方法時被觸發。

因此,它不適用於屬性 - 你需要爲你的例子工作,你所描述的是__getStatic。但是,這並不存在。

,我能想到的最接近的解決方法是使用類似:

Example::test()->one(); 
Example::test()->two(); 

哪裏test()可以通過__callStatic來定義,它返回它具有方法onetwo,或具有__call定義的對象。

編輯:

這裏有一個小例子(代碼沒有經過測試):

class ExampleTest { 
    public function __call($name, $arguments) { 
     if ($name == 'one') { 
      return 'one'; 
     } 

     if ($name == 'two') { 
      return 'two'; 
     } 
    } 
} 

class Example { 
    public static function __callStatic($name, $arguments) { 
     if ($name == 'test') { 
      // alternatively it could be return ExampleTest.getInstance() if you always want the same instance 
      return new ExampleTest(); 
     } 
    } 
} 
+0

我看準了__call功能和確實提到的對象,但我不知道我是否可以打電話它來自__callStatic內部並做我所需要的。沒有真正考慮過我怎樣才能測試... – Aran

+0

但是你不會在'__callStatic'中定義它,你可以在'test()'返回的對象的類上定義它。如果還不清楚,請告訴我,我會添加一個例子。 – deviousdodo

+0

你可以添加一個例子表示感謝,謝謝。 – Aran