我想通過(任何類型,不僅PHP的基元)類型作爲函數參數。更像是一個C++的模板。在PHP中可能嗎?假想代碼:我可以在PHP中傳遞一個類型作爲參數嗎?
function foo(T a)
{
$output = new T();
//do something.
}
我試圖通過類型名稱字符串,然後用settype()
的變量那種類型,但只使用PHP的原語類型settype()
工作。我的目標實際上是傳遞一個類類型作爲參數。
我想通過(任何類型,不僅PHP的基元)類型作爲函數參數。更像是一個C++的模板。在PHP中可能嗎?假想代碼:我可以在PHP中傳遞一個類型作爲參數嗎?
function foo(T a)
{
$output = new T();
//do something.
}
我試圖通過類型名稱字符串,然後用settype()
的變量那種類型,但只使用PHP的原語類型settype()
工作。我的目標實際上是傳遞一個類類型作爲參數。
如果你想實例化類似上面的東西,那麼如何將類名作爲字符串傳遞並實例化呢!
function foo($obj_string)
{
$object = new $obj_string();
//do stuff with $object
}
我有不知道它可能在PHP中。我正要使用'$ object = eval(「new」。$ typeName。「();」);'!謝謝! – Jack 2015-02-23 20:59:41
是的,PHP是可怕的怪異。如果你不介意將我的標記作爲答案,我會很欣賞這些要點! – wilkesybear 2015-02-23 21:00:16
PHP變量是否就像C的宏一樣?大聲笑我等着能夠接受你的答案。大約5分鐘。 – Jack 2015-02-23 21:02:25
我看到你已經接受了一個答案,但是從原始帖子,它顯示了在函數中傳遞一個對象變量。對於那些需要這樣做的人來說,不要將類的名字作爲字符串傳遞,你可以這樣做:
class Blah
{
public $x = 123;
}
function Foo($b) {
$class = get_class($b);
$object = new $class();
var_dump($object);
}
$aa = new Blah();
Foo($aa);
你現在正在構建一個新的Blah **兩次**?這有什麼用?這解決了什麼? – RobIII 2017-10-24 12:45:26
http://php.net/manual/ en/language.oop5.typehinting.php – AbraCadaver 2015-02-23 20:52:20
不知道我是否理解,如何使用它作爲參數傳遞類型?到目前爲止,我可以理解,它作爲類型檢查很有用,因爲它確實強制一個函數只能用於特定的對象類型。 – Jack 2015-02-23 20:54:56
不確定我是否仍然理解,但'get_class($ a);'應該導致'T' – AbraCadaver 2015-02-23 21:00:17