Links
Entries
あなたの知らない PHP 5つの秘密。
- Date
- 2006-07-16 (Sun)
- Category
- Links | Translation | Trivia | php
以下は、5 Things You Probably Didn't Know About PHP By Gregory Szorcのいい加減訳です。
?> はオプション
<?php
...
?>
たいだい上のように PHP のコードを書くと思うけれど、最後の ?> は実は書かなくてもいい。少なくとも PHP 5.1 では動く。問題点はあるけど、XML なんかの出力には、?> 以降に(意図的でない)空白行が入ると問題を引き起こす(こともある)ので、終了タグを書かない。
他言語を PHP 中に埋め込むことができる
Java, Perl, Python と .NET なんかは PHP から実行できる。Java Inteface はとってもクール。
配列へアクセスする方法で、オブジェクトも扱える
Standard PHP Library (SPL) を使えば、オブジェクトをあたかも配列のように扱える。 例えば ArrayObject を使うと以下のようなことが出来る。
$object = new MyObject();
$object['name'] = 'Hello World';
あるいは
$object = new MyObject();
foreach ($object as $k=>$v) {
echo "$k = $v\n";
}
など。
require() は require_once() より速い
(これは PHP 5.2 までの話だけれど、)require_once でなく require を使った方が、アプリケーションが大きくなればなるほど、相当速くなる。require_once は呼ばれるたびに余分な system call が走って重複がないことを確認するから。「じゃぁどうやって重複がないことを保証するわけ?」「まだ require_once なんか使ってんのがダセーの。__autoload をうまく使え。」もし SPL が入ってるなら、spl_autoload_* を使えば複数の autoload ができる。より詳しい内容は Zend Framework ML のこのスレを読もう。
PHP 5.1.0 未満を使ってる奴はアフォ
PHP 5.0.x ブランチはもうメンテされてない。PHP 4.x ブランチは死んでる。いかに理由を挙げるから、まだ移行してない奴はするように
- たいていの PHP4 で書かれたコードは動く。動かないとか言ってたのは FUD。開発者は互換性確保のためによくやってるから、まだ PHP4 を動かしてる奴は PHP 4 から PHP 5 への移行: 下位互換性のない変更点 を見ながらコードを grep するように。
- PDO 使え! SQL を別ハンドラにかく必要なくなるし、SQL Injection 対策もばっちりになる。
- Standard PHP Library (SPL) は今まで PHP で考えられかったすごいこと。
- いくつかの人気アプリが PHP5 への以降をすませた。例えば MediaWiki 1.7
- PHP5 のオブジェクトモデルは他のオブジェクト指向言語によく似てる。例えば Java とか。PHP5 はアクセス修飾子もあるし、抽象クラス、インターフェイス、それにマジックメソッドもある。
以下感想。
僕は PHP の parse の処理を考えると、閉じタグがいらない理由はなんとなくわかるけど、場合によりけりだと思うなぁ。Class 定義の書いてあるファイルとか、人に見せるコードはちゃんと閉じたい。直接関係ないけれど、始まりは <?php でするのは大賛成です(できれば short-open-tag を php.ini で off にして)。
他言語埋め込みは、僕にはとりあえず必要性がないのでよくわかりません。
SPL の ArrayObject は、Greg 曰く database query result とか LDAP directory queries によく使って便利だとか。ちょうど昨日も書いたけど、SPL は面白そうなので今度触ってみよう。
PDO 使えってのも、いいんだけど、『PDO 使えば SQL Injection 対策になる』ってのは危ないね。ちゃんと使えば、SQL Injection を起こすコードを書きにくくなるってだけだし。
Links on July 10, 2006
- Date
- 2006-07-10 (Mon)
- Category
- Links
- Mac OS X: キーボードショートカット
- スリープさせるキーボードショートカットってしらなんだ。Ctr-Eject で、ダイアログ、Opt-Com-Eject で直接スリープとな。
- Rabin Karp アルゴリズムでコード重複の検出
- Hash を使った文章比較、って僕も前に考えた。というか今も考え中。CVS ほどの大規模でなくても、普段のファイル出し入れ作業を変えることなくバージョン管理とかできたらすてきかな〜とか。
- CREATIVE WORLD 2006 - あの「大神」のタッチ、モーションはどう実現!?
- 日本ってこういうところ素敵。行きたいけど。。大神は最初の Movie が発表された時から、ずっと見続けている気がするけれど、まだプレイしたこともない。
- スラド:大規模なソースコード、何万行までいじれますか? のコメント
- Slashdot を読んで、たまに出会うこういう shell 小技。ログの切り出しとか、こういうのでコマンドを覚えた僕はいったい。
taka2 (14791) のコメント: 2006年07月10日 17時51分 (#975691)
> cat *.[ch] | wc -l
だと、サブディレクトリ下のファイルが計れないっすよ。
とはいえ、
> find . -type f | xargs wc -l | awk '{l += $1}END{print l}'
これはダメですね。wc は、引数の個々のファイルについての計測結果とは別に、最後に調査したファイル全部の合計も表示しますから、出てる数字全部足したら2倍の数字が出てしまいます。
そんなにファイルが多くないなら、
find . -type f -print0 | xargs -0 wc -l | grep total
で十分でしょう。ファイル数が多いなら、
find . -type f -print0 | xargs -0 wc -l | grep total | awk '{l += $1}END{print l}'
で。