tohokuaikiのチラシの裏

技術的ネタとか。

いまさら知らなかったPHPのincludeの返り値

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で「えー、そんなんありー」なコードだった。