这是我的第一个问题。
我正在对 php 脚本进行一些优化,提高其执行速度......
之间:
$datas = array();
$datas['file_import'] = $file_name_reporting;
和:
unset($datas);
$datas['file_import'] = $file_name_reporting;
有人可以告诉我哪个更快吗?
谢谢
您的第二个示例会导致警告,因为$datas
现在null
并且您将其视为数组,因此您必须在之前将其声明为空数组。
因此,只需按照您的第一个示例进行操作 - 分配一个空数组,然后将一些数据放入其中。
array(( 将创建一个数组,而 unset(( 将销毁一个变量。
我认为第一种方法只是覆盖,但第二种方法包括删除,检查存在,触发警告和创建新数组
声称任何一种形式都比另一种形式"更快"是荒谬的。这两个版本的执行速度都非常快,以至于您需要在循环中运行它们数百万次才能注意到差异。你真的在你的脚本中这样做吗?如果没有,请忘记这里的"优化"(实际上,正如任何有经验的开发人员都可以告诉您的那样,"通过眼睛"忘记所有优化是个好主意(。
最重要的是,这两个版本实际上做了不同的事情,因为unset
将从 sumbol 表中删除名称$datas
(并在您尝试向数组添加值时在下一行中通知您(。
只需使用感觉正确的内容,并查看繁重的循环以找到要优化的内容。
在这两种情况下,都将构造一个新的数组。在 php 中取消设置变量,会将其值设置为 null,仅在下一行调用数组构造函数。虽然我同意 knittl,但我的建议是:
$datas = array('file_import' => $file_name_reporting);
通过创建新数组,您可以自动"取消设置"变量,通过将值传递给数组构造函数,您可以在使用数组时用所需的任何值填充数组。
显然,第一个代码会更快地工作,因为您只执行两个操作:显式创建一个数组并添加一部分数据。第二个示例将导致警告,因为您销毁了一个变量,然后尝试再次使用它。
此外,unset
不会释放已用内存,它只会释放变量上的指针。运行 gc 时将释放内存。要释放内存,请改用$datas = null;
。