include_onceの返り値は、昔調べた。
$var = include_once 'hoge.php';
とした時、$varがint(1):読み込み成功
bool(false):読み込み失敗
bool(true):既に読み込んでいる
なんだけど、includeの返り値っていうか、includeってstatementだったっけ。
まぁ、GIJOEさんのd3forumのコード読んでて
xoops_trust_path/modules/d3forum/include/listtopics.php
<?php if( ! include dirname(__FILE__).'/process_this_forum.inc.php' ) redirect_header( XOOPS_URL.'/user.php' , 3 , _MD_D3FORUM_ERR_READFORUM ) ;
とか出てきて、あれ?って思ったわけです。
これって、このincludeされる側で
<?php return false;
とかすると、if の中で includeの返り値がfalseとして評価されるのね。びっくり。
まぁ、同じことは当然requireでも言える。ただ、上記のように_once系では値がうんよね。
んだけど、
PHP: include - Manual
によると、
Never use include in an if statement.
とか書いてあって、なんじゃーって思ったら
This will also fail if you write: <?php if(include './foo.php' && $bar = "bar") { echo "FooBar"; } ?>
でFatalが起きるって書いてあって、そりゃ単にincludeより&&の演算子の方が強いからってだけの話で。。。。
いやぁ、久々にPHPで「えー、そんなんありー」なコードだった。