如何在函数中为通过引用传递的参数创建多个 PHP 数组?
如果我在 php 中有一个函数可以通过解析 xml 创建多个对象数组,那么如何将这些数组作为引用返回?
我需要调用 new 来分配数组吗?如何在函数中定义它们?
function ParseConfig($rawxml, &$configName, &$radioArr, &$flasherArr, &$irdArr)
抱歉,我的意思是返回多个数组作为参数引用。
我该如何在函数内创建数组?或者我可以开始将它用作数组吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
在这种情况下不需要使用引用。 PHP 使用写入时复制机制,该机制还跟踪指向当前值的项目数。如果您从函数返回一个值,并将该结果分配给变量,则引用计数仍仅为 1,因为函数中使用的变量将在函数返回时被销毁。您可以安全地编辑包含函数返回值的变量,而不必担心浪费内存。
示例测试:
输出:
如果我将函数更改为通过引用返回,我会得到以下信息:
希望这有帮助!
有关如何以及为何以这种方式工作的更多阅读,请查看 这个无耻的博客插件解释了一些关于 PHP 如何处理变量和值的内容。
There is no need to use references in this case. PHP uses a copy on write mechanism which also keeps track of the number of items pointing to the current value. If you return a value from a function, and assign that result to a variable, the
refcount
will still only be one, since the variable used in the function will be destroyed when the function returns. You can safely edit the variable containing the value returned from the function without worrying about wasting memory.Sample test:
Output:
If I change the function to return by reference, I get the following:
Hope this helps!
For some more reading on how and why this works this way, check out this shameless blog plug that explains a little bit about how PHP deals with variables and values.
return &$array;
但只返回 $array 恕我直言就可以了
return &$array;
But it is fine to just return the $array IMHO
我没有注意到你编辑了你的问题,这完全改变了事情。这里有两个不错的选择:
在函数顶部显式更改它们:
也许这是引入对象的好地方?
I hadn't noticed that you edited your question, which changes things entirely. You have two decent options here:
Explicitly change them at the top of the function:
Perhaps this is a good place to introduce an object?
从函数返回的任何数组都将通过引用返回,直到您修改该数组为止,在此之前将创建该数组的副本:
Any array returned from a function will be returned by reference until you modify that array before which a copy of the array will be made:
您可以在参数列表中指定数组类型(自 PHP 5.1 起),如果这样做,您可以立即开始将其用作数组:
如果不这样做,您应该在函数的顶部进行检查:
You can specify the array type in the argument list (since PHP 5.1), if you do that you can start using it as an array right away:
If you don't you should make a check at the top of your function: