douhe4608 2012-07-06 18:59
浏览 47
已采纳

通过const引用传递对象?

In C++ when you want a function to be able to read from an object, but not modify it, you pass a const reference to the function. What is the equivalent way of doing this in php?

I know objects in php5 are passed by reference by default, but for readability I think I will continue to use the ampersand before the variable name, like this:

function foo(&$obj)
{

}
  • 写回答

1条回答 默认 最新

  • doutale7115 2012-07-06 19:00
    关注

    If you want to pass an object but not by reference you can clone the object beforehand.

    <?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
    

    I know objects in php5 are passed by reference by default, but for readability I think I will continue to use the ampersand before the variable name

    That's your call but I find that would simply make it read more like C++. Alternativly, you can show that an object is being passed in by using type-hinting in your function definition:

    function foo(StdClass $obj)
    {
    
    }
    

    Once it's clear that $obj is an object it can be assumed that it's being passed by reference.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置