【问题标题】:Php performance between create object before pass to function or create object instance inside function在传递给函数或在函数内创建对象实例之前创建对象之间的 PHP 性能
【发布时间】: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


【解决方案1】:

我觉得第二种比较好,因为是一个局部变量,所以这个变量会在脚本拿到函数结束时被销毁。

也许这篇文章可以帮助你:Does PHP free local variables immediately after the function ends?

另一方面,如果你想制作一个循环,我想和你一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多