WEBアプリケーション研究室 開発ノート TOP

WEBアプリケーション研究室 開発ノート 2010年11月

スポンサーサイト

-------- --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

    このエントリーをはてなブックマークに追加

思ったとおりの結果で面白くもなんともないけど載せておきます。
PHPのバージョンは5.2.14です。

for文 1.7283sec


$array = array(1, 2, 3, 4);
for($i = 0; $i < 1000000; $i++)
{
$count = count($array);
for($j = 0; $j < $count; $j++)
{
$result = $array[$j]+1;
}
}


while1文 6.0947sec

$array = array(1, 2, 3, 4);
for($i = 0; $i < 1000000; $i++)
{
reset($array);
while (list(, $value) = each($array))
{
$result = $value +1;
}
}


while2文 1.5828sec

$array = array(1, 2, 3, 4);
for($i = 0; $i < 1000000; $i++)
{
$count = count($array);
while (--$count >= 0)
{
$result = $array[$count] +1;
}
}


array_walk文 6.0818sec

$array = array(1, 2, 3, 4);
for($i = 0; $i < 1000000; $i++)
{
array_walk($array, array($this, '_test'));
}

//callbackの中身
private function _test(&$value)
{
$result = $value +1;
}


本命?foreach文 1.0295sec

$array = array(1, 2, 3, 4);
for($i = 0; $i < 1000000; $i++)
{
foreach($array as $value)
{
$result = $value +1;
}
}


while1はlist(, $value) = each($array)が重そうなのは分かるけど、array_walkはもう少し早くてもいいかなと思いました。foreachは最初に配列をコピーしてるらしいので、配列を大きめにしたら2位のwhile2とそう変わらなかったです。

foreach 1.9214sec
while2 2.1149sec

$array = range(0, 1000);
for($i = 0; $i < 10000; $i++)
{
//上記テストと同じ文
}

    このエントリーをはてなブックマークに追加

Smarty3からextendsという便利な機能がつきました。
entendsについては「Smarty3を使ってみる」に書きましたが、テンプレートの継承のような機能です。

その{block}にmodeという属性があります。
例えば親テンプレートで


{block name='css'}

{/block}
こんなブロックを宣言してるとして、子テンプレートで

{block name='css'}

{/block}
とすると、上書いてしまうので/css/global/base.cssは読み込まれません。
そこで

{block name='css' mode='append'}

{/block}
とすると後ろに追加されます。PHPでオーバーライトしたメソッドでparentを呼び出すような感じです。
mode='prepend'というのもあって、文字通り/page.cssが先に読み込まれます。

こんなことできたら便利だなと思ってソースを見たら案の定ありました。流石です。

    このエントリーをはてなブックマークに追加
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。