繁体   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