【发布时间】:2016-07-14 10:29:43
【问题描述】:
我想知道"Create object and pass it to function" 或"Create object inside function" 之间的性能
- 我认为在函数内部创建对象更好,因为函数完成后,所有本地变量都会被释放。所以我认为 2 比 1 好。
1) $a = new A();
test($a);
2) test1(){$a=new A(); ..}
但我想知道函数是否在循环内调用,所以 2 案例每次都会创建对象。也许它比 1 掠夺更多的资源和时间? 这是我的测试代码,但可能回答不完美
$start_mem = memory_get_usage();
var_dump($start_mem);
$start = microtime(true);
for($i=0; $i < 10000; $i++) {
test();
}
$end = microtime(true);
$end_mem = memory_get_usage();
echo "Timne: ". ($end - $start). "\n";
var_dump($end_mem);
echo "Mem: ". ($end_mem - $start_mem). "\n";
######### test 2
// $start_mem = memory_get_usage();
// var_dump($start_mem);
// $start = microtime(true);
// $obj = new PingSitemap();
// for($i=0; $i <10000; $i++) {
// test1($obj);
// }
// $end = microtime(true);
// $end_mem = memory_get_usage();
// echo "Timne: ". ($end - $start). "\n";
// var_dump($end_mem);
// echo "Mem: ". ($end_mem - $start_mem). "\n";
function test() {
$obj = new PingSitemap();
for($i=0; $i < 1000; $i++) {
$obj->counta();
}
}
function test1($obj) {
for($i=0; $i < 1000; $i++) {
$obj->counta();
}
}
【问题讨论】:
-
我从来没有想过它,因为我通常会根据我是否需要函数之外的对象来决定这个问题,但这当然是一个有趣的问题。以后自己在家做几个测试用例吧。
-
如果你使用第二个选项,你的函数有一个硬依赖,如果对象 A 消失或被修改,函数可能会崩溃。如果您愿意,请阅读 dependency injection。
-
性能是您最不关心的问题。代码的含义和关于硬编码依赖的考虑要重要得多。
-
@JoséM.Carnero 感谢您的建议
标签: php