通过 const 引用传递对象?
Posted
技术标签:
【中文标题】通过 const 引用传递对象?【英文标题】:Passing an object by const reference? 【发布时间】:2012-07-07 06:19:07 【问题描述】:在 C++ 中,当您希望函数能够从对象中读取但不能修改它时,您可以将 const
引用传递给函数。在 php 中执行此操作的等效方法是什么?
我知道php5中的对象默认是通过引用传递的,但是为了可读性我想我会继续在变量名前使用&符号,像这样:
function foo(&$obj)
【问题讨论】:
【参考方案1】:如果你想传递一个对象而不是引用,你可以事先clone
这个对象。
<?php
function changeObject($obj)
$obj->name = 'Mike';
$obj = new StdClass;
$obj->name = 'John';
changeObject(clone $obj);
echo $obj->name; // John
changeObject($obj);
echo $obj->name; // Mike
我知道php5中的对象默认是通过引用传递的,但是为了可读性我想我会继续在变量名之前使用&符号
这是你的决定,但我发现这只会让它读起来更像 C++。或者,您可以通过在函数定义中使用类型提示来显示正在传入一个对象:
function foo(StdClass $obj)
一旦明确$obj
是一个对象,就可以假定它是通过引用传递的。
【讨论】:
这不会降低性能吗? (我有几十个对象,每个对象都需要独立传递给大约六个不同的函数) @Nate PHP 使用 copy-on-write 所以 AFAIK 除非您修改对象,否则不会浪费变量。 所以如果我事先用clone
关键字传递对象,它会在不调用对象的构造函数的情况下复制对象吗?我必须写__clone() method
吗?
@Nate 它不会调用构造函数。 __clone()
方法是可选的。仅当您想在克隆对象时执行操作时才需要。以上是关于通过 const 引用传递对象?的主要内容,如果未能解决你的问题,请参考以下文章