ライブラリが直接実行された場合はプログラムとして実行する

rubyのライブラリとかで、ファイルの最後に次のような感じになってるものがある。

if __FILE__ == $0
  ...
end

こういう風に書いておくと、他のファイルからインクルードした場合はライブラリの機能だけ提供するんだけど、そのライブラリ自体を直接単体のスクリプトとして実行できるようにもなる。
でもこれはスクリプトとして使われることを意図してなくて、単なるサンプルプログラムとして提供されています。
これ結構便利なんですよね。
簡単なライブラリの使い方がすぐに分かるし、ちょっとお試しで使ってみるのも簡単にできる。
ドキュメント読むよりも、プログラム見た方が早いし。
でも、PHPでやってるのはあんまりみないな。

理由: コマンドラインを活用するPHPプログラマが少ない?

偏見かもしれないけど、コマンドラインを活用しているPHPプログラマが他言語と比較して相対的に少ない気がする。
コマンドラインが必要ないことをメリットにしているプロジェクトもあるし...。
Webアプリ用の言語なのでしょうがないのかな。
コマンドライン便利だけどね。

理由: PHPではargvを取得する簡便な方法がない

PHPではargvを取得する方法が3つもある。

  • $argv
  • $_SERVER['argv']
  • $GLOBALS['HTTP_SERVER_VARS']['argv']

もともとWebアプリ用の言語だからargvなんてのは後付けなんだろうけど、せめて統一して欲しかった...
PEARのConsole_Getoptでも、argvを取得する専用のメソッドが定義されている。
拙作のARGFでも専用のメソッド作りましたよ。

PHPでもやろうよ

こんな感じで簡単にできるよ。
argvの取得は$argvだけで。面倒だから。

if (isset($argv[0]) && __FILE__ === realpath($argv[0])) {
    /* sample code */
}

トラックバック(1)

このブログ記事を参照しているブログ一覧: ライブラリが直接実行された場合はプログラムとして実行する

このブログ記事に対するトラックバックURL: http://blog.bz2.jp/bz2mt/mt-tb.cgi/254

PHPには__halt_compiler()なんて言う関数があったんですね。 マニュアルでは埋め込んだインストールデータを読み込むのに使っていますが、 設... 続きを読む

コメント(2)

どうもはじめまして。
Pythonでも if __name__ == "__main__": みたいな記述をよく見かけますね。
僕はPHPで書くとき↓みたいにやっています
if(!count(debug_backtrace())) {

やっぱそうですよね

debug_backtrace()を使う方法は思いつきませんでした
あざっす!!

ウェブページ

Powered by Movable Type 4.21-ja

このブログ記事について

このページは、masatoが2008年4月20日 22:37に書いたブログ記事です。

ひとつ前のブログ記事は「E_STRICTを一時的に無効にする」です。

次のブログ記事は「第13回 オープンソーステクノロジー勉強会に参加してきた」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。