第21回 LOCAL PHP部 勉強会に行ってきました

最近、朝起きるにも理由が必要なくらい怠けているので、
PHPを勉強するには良い機会だと思い、勉強会に参加してきました。

内容は、

  • 本番環境で使いたいPHP
  • PHPのCopy On Write
  • 学習テスト

でした。

本番環境で使いたいPHP
サーバーの面倒をみるスキルがないならレンタルサーバー
VPSの場合は、
低メモリ対策として監視ツールを導入する
PHPアクセラレータは、特に理由がない限りはAPCを使う
apc.statは通常1でいい(←後で調べる)

PHPのCopy On Write
こんな感じのコードを用意して、

<?php

$tmp = array();
for ($i=0; $i<10000; $i++) {
    $tmp[] = $i;
}

$a = array( $tmp );

$before = memory_get_usage(); 
$b = $a;
echo (memory_get_usage() - $before), "\n";

// この時点では、$b[0]に対して、$a[0]の複製は行われていない
// 次の破壊的編集で、編集前の$a[0]を複製する処理が行われる

array_shift( $a[0] );
echo (memory_get_usage() - $before), "\n";

?>

出力結果を見ると、こんな感じになる。(*1)

336
1332104

値コピーじゃなくて、破壊的編集を行ったタイミングで、
必要に応じてメモリが確保されてコピーされるよ、ってお話でした。
つまり、メモリが足りなくて落ちた場合は、
その修正すべき箇所が落ちたところのコードとは限らないので、
デバッグ時にこういうの知ってるといいよ、っていう内容だった気がします・・・。
あと、値渡しと参照渡しを使い分けましょう、とのことでした!

学習テスト
この関数って戻り値なんだっけ?とか、
学習目的で書く書き捨てコードでもテストコードとして書いておけば、
テストを書く練習にもなるし、リファレンスにもなるし、
テストコードだからいつでも試せて良いよね、ってお話でした。
でも、PHP Unitを入れる敷居が、ちょっと高めな気がしました・・・。

感想
すごい勉強になったんだけど、
PHPの実行環境ってCentOS 5.xだと外部リポジトリをどーこーしなきゃで、
圧倒的なインフラスキルのなさに涙がこぼれそうになりました。
あと、手元にあったVM上のUbuntuにPHPが入ってなかったのはナイショです。

おしまい。

(*1) 実行環境は、PHP 5.3.10 with Suhosin-Patch @MacOS X 10.7.4

Leave a Comment