簡體   English   中英

PHP:對象實例上的新運算符創建對象實例。 為什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM