- blogs:
- cles::blog
« Tracのdiffが文字化けするときは :: 御清水庵 清恵 »
2010/06/20

Pythonのif __name__ == '__main__':と同じ効果をphpで書く



Pythonのコード(特にライブラリ)を読んでいると下記のようなコードに遭遇することがよくあります。
if __name__ == '__main__':
# test code
これは、そのスクリプト自身がエントリーポイントである場合にのみ実行され、ライブラリとして呼び出されるときには実行されないというイディオムで、コマンドラインからユーティリティのように使えるようになっていたり、テストが書いてあったりします。これと同じことがPHPでできないかということでいろいろ試行錯誤してみました。
最初は Pythonのように __FILE__ をうまく使ってできないかと思ったのですが、PHPにはエントリポイントが格納されている特殊変数がないので、この線は断念。結局、debug_backtrace()でコールスタック調べ、空だったらエントリポイントとみなすというのが一番簡単な実装方法のようでした。
aaa.php
<?php
if(!debug_backtrace()){
echo "aaa!\n";
}
include("bbb.php");
bbb.php
<?php
if(!debug_backtrace()){
echo "bbb!\n";
}
上記のプログラムを実際に実行すると下記のようになります。
$ php aaa.php
aaa!
$ php bbb.php
bbb!
後で気づいたことですが、Stack Overflowには「PHP equivalent of Python's __name__ == "__main__"?」というそのものずばりのスレッドがあって、結果的には同じ結論にたどりつきましたが、ちょっとした頭の体操としてはよかったので気にしないことにします。
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/3613
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
« Tracのdiffが文字化けするときは :: 御清水庵 清恵 »
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . アーロンチェアのポスチャーフィットを修理(112130)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110774)
3 . 年次の人間ドックへ(110371)
4 . 2023 年分の確定申告完了!(1つめ)(109917)
5 . 三菱鉛筆がラミーを買収(109817)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110774)
3 . 年次の人間ドックへ(110371)
4 . 2023 年分の確定申告完了!(1つめ)(109917)
5 . 三菱鉛筆がラミーを買収(109817)
cles::blogについて
Referrers