簡體   English   中英

php中的變量范圍用於引用返回?

[英]Variable scope in php for a reference return?

可變范圍(如定義在這里

變量的范圍是定義它的上下文。 在大多數情況下,所有PHP變量只有一個范圍。 此單一范圍也涵蓋包含和所需文件。

//a.php
<?php
class a {
 function &func () {
   $avar = array("one", "two", "three");
   return $avar;
}
?>

__

//b.php
<?php
class b {
 include("a.php");
 $ainstance = new a;
 var_dump($ainstance->func()); 
}
?>

上面的代碼將按預期轉儲有關變量的信息(我的意思是WRT函數func形成的結構)。

我懷疑的是,

  • 當變量在函數范圍內時,它存儲在哪里?
  • 如果它在調用堆棧上,那么當函數終止時,不會清除/銷毀變量嗎?
  • 由於變量沒有被破壞(根據上面的代碼),為什么它沒有被破壞或PHP有一個機制來保存變量(比如在堆中)並返回對它的引用。
  • PHP有沒有調用堆棧?

PHP中的所有變量都是zval* ,即C指針。

如果按值返回,在大多數情況下,PHP將自動復制zval*並返回該值。 如果通過引用返回,PHP將返回原始zval* 在這些情況下,返回的zval* refcount都不會達到0。

在C方面,當你返回一個變量時,它會返回一個指向zval的指針,這是一個包含變量信息的C結構(即type,value, is_refis_ref標志)。

因為它是一個指針,它實際上並沒有返回一個本地C變量,而是一個預先分配的zval指針,它指向實際zval的位置。 除非zval* refcount達到0(即:不存儲返回值),否則該變量仍將存在直到程序結束。

暫無
暫無

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

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