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]何も返さないと1になる。
<?php
//何もreturnしない
呼び出された側(test.php)で文字列"TEST"をreturnした場合
(require, include, require_once, include_onceの4つとも同じ結果)
var_dump(require_once('test.php')); // => string(4) "TEST"
[test.php]何かをreturnすれば、呼び出し側ではその値を取得できる。
<?php
return 'TEST';
呼び出された側(test.php)で値を指定せずにreturnした場合
(require, include, require_once, include_onceの4つとも同じ結果)
var_dump(require_once('test.php')); // => NULL
[test.php]値を指定せずにreturnした場合、呼び出し側にはNULLが返される。
<?php
return;
呼び出すファイルが存在しない場合
(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'); // ここで既に読み込んでいると…once系はtrueを返す。非once系は既に読み込んでいるかどうかでは動きは変わらない。
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)
感想
分かり辛い動きではあるので、(フレームワーク等を作る場合でなければ)あまり多用しない方がいいと思う。
参考:include - PHP 5.3 日本語マニュアル
0 件のコメント:
コメントを投稿