2015-02-23 82 views
2

我想通過(任何類型,不僅PHP的基元)類型作爲函數參數。更像是一個C++的模板。在PHP中可能嗎?假想代碼:我可以在PHP中傳遞一個類型作爲參數嗎?

function foo(T a) 
{ 
    $output = new T(); 
    //do something. 
} 

我試圖通過類型名稱字符串,然後用settype()的變量那種類型,但只使用PHP的原語類型settype()工作。我的目標實際上是傳遞一個類類型作爲參數。

+3

http://php.net/manual/ en/language.oop5.typehinting.php – AbraCadaver 2015-02-23 20:52:20

+0

不知道我是否理解,如何使用它作爲參數傳遞類型?到目前爲止,我可以理解,它作爲類型檢查很有用,因爲它確實強制一個函數只能用於特定的對象類型。 – Jack 2015-02-23 20:54:56

+0

不確定我是否仍然理解,但'get_class($ a);'應該導致'T' – AbraCadaver 2015-02-23 21:00:17

回答

6

如果你想實例化類似上面的東西,那麼如何將類名作爲字符串傳遞並實例化呢!

function foo($obj_string) 
{ 
    $object = new $obj_string(); 
    //do stuff with $object 
} 
+0

我有不知道它可能在PHP中。我正要使用'$ object = eval(「new」。$ typeName。「();」);'!謝謝! – Jack 2015-02-23 20:59:41

+0

是的,PHP是可怕的怪異。如果你不介意將我的標記作爲答案,我會很欣賞這些要點! – wilkesybear 2015-02-23 21:00:16

+0

PHP變量是否就像C的宏一樣?大聲笑我等着能夠接受你的答案。大約5分鐘。 – Jack 2015-02-23 21:02:25

2

我看到你已經接受了一個答案,但是從原始帖子,它顯示了在函數中傳遞一個對象變量。對於那些需要這樣做的人來說,不要將類的名字作爲字符串傳遞,你可以這樣做:

class Blah 
{ 
    public $x = 123; 
} 


function Foo($b) { 
    $class = get_class($b); 
    $object = new $class(); 
    var_dump($object); 
} 

$aa = new Blah(); 
Foo($aa); 
+0

你現在正在構建一個新的Blah **兩次**?這有什麼用?這解決了什麼? – RobIII 2017-10-24 12:45:26

相關問題