1
"Create object and pass it to function"
または"Create object inside function"
の間で私は不思議です - 関数内でオブジェクトを作成すると、だから私は1関数に渡す前にオブジェクトを作成するか、関数内でオブジェクトインスタンスを作成する間にPHPの性能が発生する
1) $a = new A();
test($a);
2) test1(){$a=new A(); ..}
よりも2より良いと思いますが、関数がループ内で呼び出された場合、私は疑問に思うので、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();
}
}
関数の外にオブジェクトが必要かどうかに基づいてこの問題を決めるのが普通ですが、これは確かに面白い質問です。 後で自宅で自分でテストケースをいくつか作ります。 – PockeTiger
2番目のオプションを使用した場合、関数は依存性が強く、オブジェクトAが消滅したり変更されたりすると、関数がクラッシュする可能性があります。あなたが望むなら、[dependency injection](http://code.tutsplus.com/tutorials/dependency-injection-in-php--net-28146)を読んでください。 –
パフォーマンスは真剣にあなたの懸念事項の中で最も少なくなります。 *コードの意味*とハードコードの依存関係に関する考慮事項ははるかに重要です。 – deceze