やったことだけ書く備忘録

【今更】PHP5のcloneについて調べてみた

今更ですが、PHPにclone文というものがあって、どのライブラリも使ってないみたいなので一体どうなんだろう、ということで調べてみました。
ちなみに、PHPマニュアルはこちらです




PHP Manual::オブジェクトのクローン作成



クラスインスタンスを複製して使用する際に使えるみたいですが、都度インスタンスを生成するよりももしかしたらメモリ効率とか良くならないかなーって感じでテストしてみました。



ベンチマーク的な


以下のようなコードで、インスタンスを10000回生成した時の速度とメモリ使用量を計測。



<?php

class TestClass {
    public static 
$instance 0;

    function 
__construct() {
        
self::$instance++;
    }
    public static function 
get_instance() {
        return 
self::$instance;
    }
}

$start microtime();
$v = new TestClass();
for ( 
$i $i 9999$i++ ) {
    
$v = new TestClass(); // case 1
    //$v = clone $v;  // case 2
}
$end microtime();

list(
$stm$sts) = explode(' '$start);
list(
$edm$eds) = explode(' '$end);
echo 
'Time --> ' number_format(($edm $eds) - ($stm $sts), 4)
    . 
"\n" 'memory > ' memory_get_usage();
 


case1とcase2の場合で調べてみます。結果は以下の通り。



case1(都度インスタンス生成)

Time > 0.0094
memory > 325412

case 2(cloneで複製)

Time > 0.0031
memory > 324440


結果



メモリ使用量はさほど変わりませんでしたが、cloneの方が速度がちょっと速い。これはコンストラクタが呼ばれるコストがないからだと思われます。__clone()メソッドを定義している場合だともう少し速度は落ちるかもしれないです。



で、どう使うのか



FWなどでインスタンスをFactoryパターンで保持してシングルトンみたいに扱ってきましたが、それだとテストがやりづらいということで、cloneだとどうかな、という使い道を考えてましたが、あまり・・・って感想です。

それでも、普通にインスタンスを生成(コンストラクタを呼ぶ)する場合と複製して__clone()メソッドを呼ぶ場合とで生成方法を分岐したりする使い道があるのかなーと思いました。



感想



使ってるライブラリをあんまりみないので、ちょっと使ってみると面白いかも知れないですね。
・・・くらいの感想でした><

« 前の記事 次の記事 »

35件のコメント

Alfreddow さん

<a href=http://stdyxh.com/home.php?mod=space&uid=34201>buy cialis</a> <a href=http://www.qizhuizhui.com/space-uid-27967.html>more information</a> <a href=http://www.sxyuege.com/home.php?mod=space&uid=58340>buy cialis online</a>

Aaronsteag さん

<a href=http://allopurinol.reisen/>allopurinol buy</a> <a href=http://genericcialis.work/>cialis</a> <a href=http://toradol10mgprice.pro/>toradol</a>

Michaelker さん

<a href=http://buy-sildenafil.reisen/>sildenafil</a> <a href=http://diclofenac.schule/>diclofenac</a> <a href=http://buy-cialis.reisen/>viagra levitra cialis</a>

BennyPem さん

<a href=http://zithromaxonline.pro/>zithromax online</a> <a href=http://plavixgeneric.store/>plavix</a> <a href=http://buy-crestor.work/>crestor</a>

BrettTwima さん

<a href=http://buy-provera.reisen/>provera</a> <a href=http://genericcelexa.pro/>buy generic celexa</a>

Charlestaf さん

<a href=http://buyaugmentin.reisen/>generic augmentin</a> <a href=http://wellbutrin.shop/>wellbutrin</a> <a href=http://doxycycline.shop/>vibramycin 100 mg</a>

Michaelker さん

<a href=http://antabuse.schule/>buy disulfiram without prescription</a> <a href=http://sildalisonline.pro/>article source</a> <a href=http://buy-ampicillin.store/>buy ampicillin</a> <a href=http://albuterol.reisen/>albuterol</a>

Johndroks さん

<a href=https://paydayloans.us.org/>payday loans online</a>

Alfreddow さん

[url=http://doxycyclineprice.us.org/]buy doxycycline[/url] [url=http://hydrochlorothiazide12.us.org/]Hydrochlorothiazide[/url] [url=http://cheapvardenafil365.us.com/]purchase vardenafil[/url]

Charlestaf さん

<a href=http://bupropionsr150mg.us.org/>Buy Bupropion Without Script</a>

Aaronsteag さん

<a href=http://doxycyclineprice.us.org/>doxycycline from canada</a>

Charlestaf さん

<a href=http://doxycycline100mg.us.org/>buy Doxycycline</a> <a href=http://doxycyclineprice.us.org/>buy doxycycline</a>

Kennethsaugs さん

<a href=http://lisinopril20mg.us.org/>lisinopril</a> <a href=http://indocin247.us.com/>indocin online</a> <a href=http://medrolpack.us.org/>medrol prices</a>

Stewarthek さん

<a href=http://fluoxetine247.us.com/>Order Fluoxetine</a>

BrettTwima さん

<a href=http://hydrochlorothiazide12.us.org/>valsartan hydrochlorothiazide</a> <a href=http://indocin247.us.com/>indocin</a>

BennyPem さん

<a href=http://trazodone247.us.com/>Trazodone</a>

Jamesdrart さん

sex chat <a href=https://sexchat.us.com>online sex chat</a> free adult sex chat https://sexchat.us.com - sex chat free

Cheap Essays さん

write essay <a href=https://writemyessay.us.com>help me with my essay</a> write essay for me <a href=https://writemyessay.us.com>websites that write essays for you</a>

Speedycash さん

payday loans online <a href=https://bestpaydayloansonline.us.com/>payday loan online</a> payday loans online no credit check <a href=https://bestpaydayloansonline.us.com/>online payday loans no credit check</a>

Online Payday Loan さん

payday <a href=https://onlineloans.us.com/>payday loan online</a> https://onlineloans.us.com/ [url=https://onlineloans.us.com/]payday loans online[/url]

Jamesdrart さん

Read This <a href=https://sexchat.us.com>sexchat.us.com</a> sex chat <a href=https://sexchat.us.com>online sex cam</a>

Jamesdrart さん

free sex chat cams <a href=https://freesexchat.us.com>sex chat room</a> free live sex chat <a href=https://freesexchat.us.com>xxx chatrooms</a>

Aaronsteag さん

wh0cd922457 <a href=http://buyretina.work>order retin a online</a> <a href=http://buyretina.work>retin-a</a> http://buyretina.work <a href=http://celexa.mba>cheap celexa</a> <a href=http://celexa.mba>cheap celexa</a> http://celexa.mba

Michaelker さん

wh0cd1406053 <a href=http://tadalafil247.us.com>tadalafil 40 mg</a> <a href=http://tadalafil247.us.com>Tadalafil 40 Mg</a> http://tadalafil247.us.com <a href=http://avalide.top>avalide</a> <a href=http://avalide.top>cheap avalide</a> http://avalide.top

BrettTwima さん

wh0cd2373245 <a href=http://propecia.directory>propecia</a> <a href=http://propecia.directory>finasteride hair</a> http://propecia.directory

BrettTwima さん

wh0cd3340437 <a href=http://buy-vermox.work>vermox</a> <a href=http://buy-vermox.work>vermox</a> http://buy-vermox.work

Jamesdrart さん

Read Full Report <a href=https://essaywritingservices.us.com>essay writing service review</a> essay writing service review https://essaywritingservices.us.com - essays writing services

Charlestaf さん

wh0cd3340437 <a href=http://baclofen.fail>baclofen</a> <a href=http://baclofen.fail>baclofen buy online</a> http://baclofen.fail

Jamesdrart さん

top 10 essay writing services <a href=https://essaywritingservices.us.com>affordable essay writing service</a> essay writing service <a href=https://essaywritingservices.us.com>Read Full Article</a>

BennyPem さん

wh0cd2373245 <a href=http://buyavana.store>avana</a> <a href=http://buyavana.store>buy avana</a> http://buyavana.store

Stewarthek さん

wh0cd2373245 <a href=http://buycitalopram.reisen>buy citalopram</a> <a href=http://buycitalopram.reisen>buy citalopram</a> http://buycitalopram.reisen

Charlestaf さん

wh0cd1406053 <a href=http://buyflagyl.reisen>flagyl</a> <a href=http://buyflagyl.reisen>flagyl</a> http://buyflagyl.reisen

Kennethsaugs さん

wh0cd438861 <a href=http://eurax.live>eurax without prescription</a> <a href=http://eurax.live>look at this</a> http://eurax.live

Alfreddow さん

wh0cd922457 <a href=http://prednisone.work>prednisone 5 mg tablet</a> <a href=http://prednisone.work>prednisone</a> http://prednisone.work

Charlestaf さん

wh0cd3340437 <a href=http://erythromycin.reisen>erythromycin</a> <a href=http://erythromycin.reisen>erythromycin</a> http://erythromycin.reisen

コメントを投稿する

 画像に表示されている文字を入力してください。