簡體   English   中英

當我在PHP中實例化一個類時,我是否得到一個指向該對象的指針?

[英]When I instantiate a class in PHP, do I get a pointer to the object?

或者,我的變量是否保留了對象本身?

當我說例如:

$obj = new ClassOne();

是$ obj指向內存中創建的對象的指針? 它只保存對象的內存地址嗎? 或者它是否持有物體本身?

例如,當我說,

$obj = new SomeOtherClass();

ClassOne對象會像JAVA一樣被垃圾收集,還是會像C ++一樣導致內存泄漏?

文件說:

PHP以與引用或句柄相同的方式處理對象,這意味着每個變量都包含一個對象引用而不是整個對象的副本。 請參閱對象和參考。

閱讀文檔。 這就是它寫成的原因。

PHP中沒有指針 保存對象的變量包含對象標識符對象引用 這是一個基本上是類型object的變量,其值為42 (或者內部對象標識符是什么)。 它是一個引用對象的值,它存儲在內存中的某個位置。 它不是指針或內存地址。 將另一個對象分配給變量會為變量分配另一個對象標識符,它不會更改任何內存地址或先前分配的對象。

簡而言之,C ++和Java中的對象模型有點不同:

  • C ++有無約束變量:每個對象類型都可以作為變量對象的類型出現。 換句話說,變量可以是任何類型的對象。 (但並非所有變量都是對象(例如引用)!)此外,所有變量都是作用域的,因此所有對象的生命周期 - 這些變量也是自動限定范圍的。 只有動態分配的對象永遠不能是變量,它們只能通過指針和引用來處理。

  • 在Java中,如果我們忽略原始類型,變量永遠不是對象,對象永遠不能是變量。 所有對象總是“神奇地在其他地方”(例如“GC堆”),並且您只能通過類似指針的句柄來處理它們。 在Java中,類型為T變量始終是對T類型的實際對象的引用,它居住在其他地方。 變量也是作用域的,就像在C ++中一樣,但是所有Java 對象的生命周期都是不確定的,並且只能保證超出給定對象的所有引用的生命周期。

    (對於內置的“值”類型類型,例如int ,情況不同,它可以作為變量的類型出現,實際上不能動態分配。)

  • 我認為PHP在這方面類似於Java。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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