今日、オブジェクトを返すファイルをインクルードしようとしました。私は常にrequire_onceを使用していますが、今では奇妙な動作に気付きました。
ファイル main.php
$lang = false;
$lang->name = "eng";
$lang->author = "Misiur";
$lang->text = "Text is test";
$lang->undefined = "Undefined";
return $lang;
ファイル index.php
$lang = include('langs/eng/main.php');
var_dump($lang);
echo "<br />";
$lang = require('langs/eng/main.php');
var_dump($lang);
echo "<br />";
$lang = require_once('langs/eng/main.php');
var_dump($lang);
結果
object(stdClass)#9 (4) { ["name"]=> string(3) "eng" ["author"]=> string(6) "Misiur" ["text"]=> string(12) "Text is test" ["undefined"]=> string(9) "Undefined" }
object(stdClass)#10 (4) { ["name"]=> string(3) "eng" ["author"]=> string(6) "Misiur" ["text"]=> string(12) "Text is test" ["undefined"]=> string(9) "Undefined" }
bool(true)
なぜそうなのですか?私はrequireとrequire_onceは同じものだと思っていました.require_onceだけは重複しないので安全です。
ありがとう。
編集:
しかし、require_onceだけを使用すると、bool(true) も取得されます。つまり、require_once はコンテンツではなく、インクルードの結果のみを返しますか?
編集2:
笑。以前、このコードの実行前に作成されたクラス内でこのファイルを必要としていたことに気づきませんでした ($this->file = require_once("langs/$name/main.php");)
そのため、require_once は正常に機能しました。みんなありがとう!