2011年2月4日金曜日

PHPの requireや includeの戻り値

PHPのrequire, include, require_once, include_onceは、通常のfunctionと同じように戻り値を取得できる。
いろいろな場合の戻り値の変わり方について調べてみた。



呼び出された側(test.php)で何もreturnしなかった場合
(require, include, require_once, include_onceの4つとも同じ結果)

var_dump(require_once('test.php')); // => int(1)
[test.php]

<?php
//何もreturnしない
何も返さないと1になる。



呼び出された側(test.php)で文字列"TEST"をreturnした場合
(require, include, require_once, include_onceの4つとも同じ結果)
var_dump(require_once('test.php')); // => string(4) "TEST"
[test.php]

<?php
return 'TEST';
何かをreturnすれば、呼び出し側ではその値を取得できる。



呼び出された側(test.php)で値を指定せずにreturnした場合
(require, include, require_once, include_onceの4つとも同じ結果)
var_dump(require_once('test.php')); // => NULL
[test.php]

<?php
return;
値を指定せずにreturnした場合、呼び出し側にはNULLが返される。



呼び出すファイルが存在しない場合
(include, include_onceの場合)
var_dump(include_once('not_found.php')); // => bool(false)
include, include_onceの場合はWarningは出るが処理は続行し、falseを返す。
require, require_onceの場合はWarningの後にFatal errorが発生し、処理が止まってしまうので戻り値は返らない。



呼び出すファイルが既に読み込み済みの場合
require('test.php'); // ここで既に読み込んでいると…

var_dump(include_once('test.php')); // => bool(true)
var_dump(require_once('test.php')); // => bool(true)
var_dump(include('test.php')); // => int(1)
var_dump(require('test.php')); // => int(1)
once系はtrueを返す。非once系は既に読み込んでいるかどうかでは動きは変わらない。



感想
分かり辛い動きではあるので、(フレームワーク等を作る場合でなければ)あまり多用しない方がいいと思う。


参考:include - PHP 5.3 日本語マニュアル

0 件のコメント:

ブログ アーカイブ

tags