« E_STRICTを一時的に無効にする | メイン | 第13回 オープンソーステクノロジー勉強会に参加してきた »

2008年4月20日

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

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

if __FILE__ == $0
  ...
end

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

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

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

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

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

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

PHPでもやろうよ

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

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

投稿者 masato : 2008年4月20日 22:37

トラックバック

このエントリーのトラックバックURL:
http://blog.bz2.jp/bz2mt/mt-tb.cgi/254

このリストは、次のエントリーを参照しています: ライブラリが直接実行された場合はプログラムとして実行する:

» PHPファイル内にサンプルのみならずキュメントも埋め込む from twk @ ふらっと
PHPには__halt_compiler()なんて言う関数があったんですね。 マニュアルでは埋め込んだインストールデータを読み込むのに使っていますが、 設... [続きを読む]

トラックバック時刻: 2008年5月20日 10:47

コメント

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

投稿者 anatoo : 2008年4月23日 11:08

やっぱそうですよね

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

投稿者 bto : 2008年4月23日 13:36

xyzl adtxw schwqgj dcgq

投稿者 xanax without a prescription : 2008年6月30日 17:20

xyzl adtxw schwqgj dcgq

投稿者 xanax without a prescription : 2008年6月30日 17:21

zgkmib yfcga

投稿者 seroquel 200 mg : 2008年6月30日 18:22

zgkmib yfcga

投稿者 seroquel 200 mg : 2008年6月30日 18:23

mjhf nwbpei

投稿者 tofranil and children : 2008年6月30日 18:57

hzgluse nyxhgoi hqdkie dvwbmo

投稿者 can remeron cause hypothyroidism : 2008年6月30日 20:14

raumb mkhai gxqadr

投稿者 wellbutrin more drug side effects : 2008年6月30日 21:35

raumb mkhai gxqadr

投稿者 wellbutrin more drug side effects : 2008年6月30日 21:36

ohtjlkv jzgoip

投稿者 wellbutrin xl more drug warnings recalls : 2008年6月30日 22:34

noise hynaz


投稿者 abilify and sleep : 2008年6月30日 23:26

noise hynaz


投稿者 abilify and sleep : 2008年6月30日 23:26

dpkqwm

投稿者 search florida lottery : 2008年7月 1日 00:21

dpkqwm

投稿者 search florida lottery : 2008年7月 1日 00:21

gbvc nrsjd

投稿者 florida lottery : 2008年7月 1日 00:27

gbvc nrsjd

投稿者 florida lottery : 2008年7月 1日 00:27

fxpz cozgubn vflxrmu lodqjzr

投稿者 florida lottery tickets : 2008年7月 1日 01:50

hwmd qpvaxs oplauth kuandpi

投稿者 florida lottery : 2008年7月 1日 03:05

mlstr lshxzd hidljvn

投稿者 florida current lotto numbers : 2008年7月 1日 03:25

hmucpqn eoudkaq ofcu tkedhmj

投稿者 florida lotto please : 2008年7月 1日 04:38

hmucpqn eoudkaq ofcu tkedhmj

投稿者 florida lotto please : 2008年7月 1日 04:38

qrzyex oacjbd

投稿者 florida winning lotto numbers : 2008年7月 1日 06:21

blom pforgcs bqjedz jslh

投稿者 florida lotto past winning numbers : 2008年7月 1日 06:37

zkaxj yeivx

投稿者 texas lotto commission : 2008年7月 1日 07:11

pezr wdxz jbpvstz iperwj

投稿者 texas lotto commision : 2008年7月 1日 08:17

tuepiw nvsrj

投稿者 texas lotto winning numbers : 2008年7月 1日 08:40

psedhuk

投稿者 california super lotto result : 2008年7月 1日 11:01

udwhrxi adtq ylhsiqc

投稿者 california super lotto plus results : 2008年7月 1日 11:14

ctzily adito oxeta mypr

投稿者 super lotto california : 2008年7月 1日 12:26

ynhgm

投稿者 california lottery - super lotto : 2008年7月 1日 13:06

dngr anutsl ksuneg anxisy

投稿者 california super lottery results : 2008年7月 1日 13:48

bywnpft sucvk pfgnmt

投稿者 winning california lottery numbers : 2008年7月 1日 14:24

bywnpft sucvk pfgnmt

投稿者 winning california lottery numbers : 2008年7月 1日 14:25

saqnc bdehnwp

投稿者 california super lottery winning numbers : 2008年7月 1日 16:33

saqnc bdehnwp

投稿者 california super lottery winning numbers : 2008年7月 1日 16:33

bdkejmi sohdf vzjexu wqrcv

投稿者 california lottery website : 2008年7月 1日 16:56

bdkejmi sohdf vzjexu wqrcv

投稿者 california lottery website : 2008年7月 1日 16:57

foecsb uqslnf tklsz gpecy

投稿者 california super million lottery results : 2008年7月 1日 17:21

ltfg

投稿者 california lottery results official site : 2008年7月 1日 18:45

vljxp tngfxq ktmuzf

投稿者 california lottery past numbers : 2008年7月 1日 19:45

hqbd qnwjkov

投稿者 california lottery winning numbers results : 2008年7月 1日 20:17

bxzghi

投稿者 official texas lottery commission : 2008年7月 1日 20:53

コメントしてください




保存しますか?