我只是很好奇PHP是否可以在飛行中創建對象。我以爲我以前看過它。當然,我可以將它分配給一個變量,但只是想知道這是否可能。用PHP創建對象而不用變量賦值使用PHP
new className()->someMethod();
當然這會拋出一個語法錯誤,所以顯然它沒有這樣做(如果甚至可能的話)。 我應該把它分配給一個變量,因爲我真的沒有問題,我只是好奇嗎?
只是一些進一步的細節。靜態方法並不是真正的選擇,因爲我正在嘗試這樣做的類是PHP的ReflectionMethod類。
我只是很好奇PHP是否可以在飛行中創建對象。我以爲我以前看過它。當然,我可以將它分配給一個變量,但只是想知道這是否可能。用PHP創建對象而不用變量賦值使用PHP
new className()->someMethod();
當然這會拋出一個語法錯誤,所以顯然它沒有這樣做(如果甚至可能的話)。 我應該把它分配給一個變量,因爲我真的沒有問題,我只是好奇嗎?
只是一些進一步的細節。靜態方法並不是真正的選擇,因爲我正在嘗試這樣做的類是PHP的ReflectionMethod類。
這隻適用於如果您使用單例模式來實例化對象的情況。如果您不知道如何實現單例模式,則必須在網絡上搜索。但是這樣一來,將工作:
className::getInstance()->someMethod();
編輯
正如zerkms表示工廠方法也將是可能的:
class ReflectionFactory
{
public static function factory($arguments)
{
return new ReflectionClass($arguments);
}
}
// Then in your code for example
ReflectionFactory::factory()->getConstants();
目前在PHP是不可能實例化新對象並在一個表達式中調用它的方法。
所以顯然你需要將它分配給一些變量。
這值得一試。 :) –
您可以在不將類的實例保存到變量的情況下在類上使用靜態方法。
class testClass{
public static function staticMethod(){
echo "Static method";
}
}
testClass::staticMethod();
我不知道爲什麼PHP不允許鏈接的構造函數。如果你真的需要這樣做,可以嘗試下面的內容,並進行必要的調整。
<?php
class A {
public function b()
{
echo "a->B is called";
}
public static function factory()
{
return new self;
}
}
$a = A::factory()->b();
?>
此用法在Java中是典型的,但在PHP 5.3之前不可用。現在它是PHP 5.4中的一個新功能。請檢查PHP 5.4 new features。和使用應該是:
(new Foo)->bar()
這是(現在)這裏正確的答案。 – James
令人驚歎!無需爲每個類編寫'create()'! – zjuwujunchao
你嘗試過'(new className()) - > someMethod();'? – jerluc
@jerluc:它不會工作 – zerkms
是的,它不工作就像那個jerluc。 –