Klon und Neu sollten nicht miteinander verglichen werden. Aber es kann einige Szenarien geben, in denen Klon oder Neu verwendet werden können. Welches sollten wir also zu diesem Zeitpunkt wählen?
Ich habe zwei Tests geschrieben, der erste besteht darin, eine leere Klasse zu deklarieren, und der zweite ist eine Klasse mit Konstruktoren und Attributen. Darüber hinaus habe ich PHP-Serialisierungstests hinzugefügt.
Internationale Praxis, geben Sie den Code direkt ein, es ist auf einen Blick klar.
Code
<?php define('TEST_COUNT', 10000); function test($name, $callable) { $time = microtime(true); $callable(); echo $name, ' time: ', microtime(true) - $time, 's', PHP_EOL; } // 空的类 class A { } function test1() { echo '空的类:', PHP_EOL; $a = new A; test('A clone', function() use($a){ for($i = 0; $i < TEST_COUNT; ++$i) { $obj = clone $a; } }); test('A new', function(){ for($i = 0; $i < TEST_COUNT; ++$i) { $obj = new A; } }); $serialize = serialize($a); test('A unserialize', function() use($serialize){ for($i = 0; $i < TEST_COUNT; ++$i) { $obj = unserialize($serialize); } }); } test1(); // 带构造方法、属性的类 class B { public $data; public function __construct($data) { $this->data = $data; } } function test2() { echo '带构造方法、属性的类:', PHP_EOL; $constructData = [ 'id' => 1, 'name' => 'imi 框架牛逼', 'description' => 'IMI 是一款基于 Swoole 开发的协程 PHP 开发框架,拥有常驻内存、协程异步非阻塞IO等优点。', 'url' => 'https://www.imiphp.com', ]; $a = new B($constructData); test('B clone', function() use($a){ for($i = 0; $i < TEST_COUNT; ++$i) { $obj = clone $a; } }); test('B new', function() use($a){ for($i = 0; $i < TEST_COUNT; ++$i) { $obj = new B($a->data); } }); $serialize = serialize($a); test('B unserialize', function() use($serialize){ for($i = 0; $i < TEST_COUNT; ++$i) { $obj = unserialize($serialize); } }); } test2();
Laufergebnis
Leere Klasse:
A clone time: 0.0015249252319336s A new time: 0.00090503692626953s A unserialize time: 0.005108118057251s
Klasse mit Konstruktor und Attributen:
B clone time: 0.00072503089904785s B new time: 0.0015559196472168s B unserialize time: 0.0084571838378906s
Fazit
Nach den Testergebnissen der leeren Klasse zu urteilen, hat Neu eine höhere Leistung.
Nach den Testergebnissen von Klassen mit Konstruktionsmethoden und -attributen zu urteilen, ist die Leistung von Klonen viel höher als die von Neu mit Konstruktionsparametern.
Serialisierung hat wie immer eine schlechte Leistung, also verwenden Sie sie nicht, wenn Sie sie nicht verwenden können.
Also sollten wir Klonen verwenden, wo wir sollten, und die Leistung ist nicht schlecht.
Das obige ist der detaillierte Inhalt vonLeistungsvergleich von Klon und Neu in PHP (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!