[英]PHP: new operator on an object instance creates an object instance. Why?
以下代碼的工作原理是什么,並生成給定的結果。 它是PHP支持的特殊語言構造嗎? 如果是這樣,那么哪一個? 或者它只是一個簡單的php-ism?
class Foo {};
$a = new Foo();
$b = new $a();
var_dump($a); // class Foo#1 (0)
var_dump($b); // class Foo#2 (0)
PHP允許您從變量創建對象實例,如下所示:
$a = 'Foo';
$b = new $a;
因此,當你使用new $a
,PHP正在檢查它是否是一個字符串來創建類的新實例,如果它是一個對象,它將檢索對象實例的類名並從中創建一個新實例。
如果您嘗試對非字符串或非對象變量執行相同操作:
$a = 1;
$b = new $a;
這將產生一個錯誤:
PHP錯誤:類名必須是有效對象或字符串
PHP 5.3.0引入了一些創建對象實例的新方法,這是您提供的方案的一個示例:
class Test {}
$obj1 = new Test();
$obj2 = new $obj1;
有關更多信息,請參閱示例#5在 https://www.php.net/manual/en/language.oop5.basic.php#language.oop5.basic.new 下創建新對象
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.