【发布时间】:2011-12-03 05:45:09
【问题描述】:
我对 PHP 变量引用的工作方式感到困惑。在下面的示例中,我希望能够以$bar[0] 或$barstack[0][0] 访问字符串hello。在第 1 步中通过引用传递数组似乎就足够了。
第二个例子不起作用。 $foostack[0]0] 是字符串 hello,但 $foo[0] 不存在。在某些时候,$foostack 的第一个元素会变成 $foo 的副本,而不是引用。
问题出在第 2 步的第一行:当我推送引用时,我希望弹出引用。但是array_pop 会返回一个副本。
其他人告诉我,如果我不得不担心引用和副本,那么 PHP 不是适合我的语言。这可能是我能得到的最佳答案。
FWIW,为了使var_dump 有用,它需要显示一些区分引用和副本的属性。它不是。也许还有其他功能?
我的第一个 PHP 项目似乎进展不顺利。有人可以帮助阐明 这段代码有问题吗?
<?php
echo "// This works!\n<br />" ;
// step 1
$bar = array() ;
$barstack = array( &$bar ) ;
// step 2
array_push( $barstack[0], 'hello' ) ;
// results
echo count( $barstack[0] ) .';' .count( $bar ) ;
echo "\n<br />// This doesn't :(\n<br />" ;
// step 1
$foo = array() ;
$foostack = array( &$foo ) ;
// step 2
$last = array_pop( $foostack ) ;
array_push( $last, 'hello' ) ;
array_push( $foostack, &$last ) ;
// results
echo count( $foostack[0] ) .';' .count( $foo ) ;
echo "\n<br />// Version:\n<br />" ;
echo phpversion() ."\n" ;
?>
结果可以在以下网址查看:
http://www.gostorageone.com/tqis/hi.php
版本是 4.3.10。升级服务器是不切实际的。
期望的结果:
- 如果我忽略了显而易见的事情,请解释一下
- 这是一个错误吗?有什么解决方法吗?
谢谢!
-吉姆
【问题讨论】:
-
发帖前请自行检查。你可以使用 var_dump( $array ),它会告诉你数组中有什么。那么一切就都清楚了。
-
对我来说这个问题似乎不符合 StackOverflow 的规则
-
@Sunny Jim - 为了获得更好的答复,请尝试在您的问题中添加您期望发生的事情和实际发生的事情。您的链接涵盖了其中一半,但另一半没有。
-
@Sunny Jim:刚刚看到你更新了你的问题。
var_dump显示引用,它在值前面用&表示。我添加了一个答案,逐步解释会发生什么,我认为您只是错过了array_pop始终返回一个值,而不是参考/别名。我还在下面添加了一个工作示例。