Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数据的类到类传递、优化_Php_Oop_Optimization - Fatal编程技术网

Php 数据的类到类传递、优化

Php 数据的类到类传递、优化,php,oop,optimization,Php,Oop,Optimization,我编写了一个文件处理程序类,其工作原理如下: \uu construct打开并解除锁定一个文件,读取其json内容并将其解析为PHP数组,将其作为类的属性 该文件仍处于锁定状态,以避免竞争条件 其他“工作者类”在此数组中,在其他作用域中/从其他作用域中进行更改 \uuuu destruct对完成的数组进行编码,将其写入文件,然后解锁文件 一切正常 问题: 将数组保留为原始类的属性是明智的,还是最好将数组传递给工作类,并让它们在最后返回它 也许有一种方法可以将数组保存在本地,并通过引用将其传递

我编写了一个文件处理程序类,其工作原理如下:

  • \uu construct
    打开并解除锁定一个文件,读取其json内容并将其解析为PHP数组,将其作为类的属性
  • 该文件仍处于锁定状态,以避免竞争条件
  • 其他“工作者类”在此数组中,在其他作用域中/从其他作用域中进行更改
  • \uuuu destruct
    对完成的数组进行编码,将其写入文件,然后解锁文件
一切正常

问题

将数组保留为原始类的属性是明智的,还是最好将数组传递给工作类,并让它们在最后返回它

也许有一种方法可以将数组保存在本地,并通过引用将其传递给工人类,而不是作为原始数据


我是说。。。这是一个没有重复的问题,占用内存。速度的问题,不是不必要的传递。还有一个最佳实践问题,让事情更容易理解。

实际上,通过将数组传递给另一个函数,让该函数修改数组,然后将其返回给另一个调用方,该调用方可能会也可能会对其进行修改,您实际上是在多次复制该数组(因为这在PHP中调用了写时复制语义)并且顾名思义是在浪费内存

然而,通过将其保留为对象实例的属性,即使调用方不是同一实例,也不会调用任何写时复制语义。因为传递对象实例不会复制数组,也不会从所述实例复制其修改


更不用说,您只是使在该对象中保留状态变得更容易(假设您关心验证).

我想澄清一下。您的意思是,我处理驻留在文件处理程序实例中的数组的方法是明智的、最快的和最佳的做法?是的,传递包含数组成员的对象实例要比从另一个调用方修改数组时传递数组便宜得多。原因如下:当您从函数的本地范围修改数组时,您是否强制PHP复制该数组,但如果它位于实例属性内,则即使您从其他范围修改它,PHP也不会复制它。这本质上是关于依赖项注入与继承的争论否?