プログラミングPHP 第2版を読んだ
気になったところをメモ。
スタティック変数
関数が終了しても破棄されない。関数内でしか使用できない。
<?php function counter () { static $count = 0; return ++$count; } $count = 10; echo counter(); // 1 echo counter(); // 2 echo $count; // 10
and, && と or, ||
<?php // 左オペランドがfalseの場合は、右オペランドを評価しない $result = $flag and mysql_connect(); // 左オペランドがtrueの場合は、右オペランドを評価しない $result = fopen($filename) or exit();
もう一つのブロック
波括弧の代わりに、コロン(:)とキーワード(endif, endforeachなど)で囲む。htmlに埋め込む時に便利。
<?php if ($validated) : echo "Welcome!"; else : echo "Access Forbidden!"; exit; endif;
declare
指定した間隔で特定の関数を実行させることができる。register_tick_functionで登録。
<?php register_tick_function("some_function"); # 3つの文が実行されるたびに、関数sume_functionを呼び出す declare (ticks = 3) { for ($i =0; $i < 10; $i++) { // 何らかの処理 } }
for文の低レベルな命令もカウントされるらしい。
正規表現
- インラインオプション = パターンの一部に適用するオプション (?flags:subpattern)
- 先読みと戻り読み = 「次の文字が○○だったら・・・」(?=subpattern)など
- 条件式 = 正規表現でのif文のようなもの (?(条件)yespattern|nopattern)
イテレータ関数
<?php reset($array); // 位置を先頭に戻す while (list($key, $value) = each($array)) { echo "$key : $value\n"; }
この方法だとforeachのように配列をコピーしないのでメモリを節約できる。
オブジェクトのシリアライズ
オブジェクトをバイトストリームに変換し、ファイルに保存できるようにする。
<?php $encoded = serialize(something); $something = unserialize(encoded);
クラスに__sleep()、__wakeup()を定義すると、シリアライズ、復元の際にそれぞれ処理が呼び出される。
出力の圧縮
圧縮したテキストを送信できる。ブラウザがそれを展開して表示。
<?php ob_start("ob_gzhandler");
php.iniのoutput_handlerにコールバックとして指定することもできる。
- ob_gzhandler = ob_startのコールバック関数として使用する組み込み関数。
メモリ最適化
- 数値が使用できる場面では、可能な限り文字列ではなく数値を使用する。("1"ではなく1を使う)
- mysql_unbuffered_query()を使用すると、結果セットの必要な部分のみを少しずつ読み込める。
PHPの拡張、WindowsでのPHP
ちゃんと読んでないけど、拡張モジュールの作成方法、Windows版PHP、COMなどの説明もあった。
- 作者: Rasmus Lerdorf,Kevin Tatroe,Peter MacIntyre,高木正弘
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2007/10/23
- メディア: 大型本
- 購入: 16人 クリック: 329回
- この商品を含むブログ (50件) を見る