7

今日、オブジェクトを返すファイルをインクルードしようとしました。私は常に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 は正常に機能しました。みんなありがとう!

4

4 に答える 4

11

include と require を使用すると、参照しているページが含まれているという結果が得られます。require_once を使用すると、require を使用してページが既に読み込まれていることが確認され、true が返されて、ある時点で正常に読み込まれたことが示されます。

于 2010-06-04T14:10:39.407 に答える
7

まさにそれで、インクルードを複製しようとしています。require_once以前に含まれていない、または必要とされていないものがある場合は、戻り値が返されます 。

編集: PHP 5.3.2 でのこの簡単なテストでrequire_onceは、初めて使用するときに戻り値を取得します。

親.php:

<?php
$first = require_once("child.php");
var_dump($first);
$second = require_once("child.php");
var_dump($second);
?>

child.php:

<?php
return "foo";
?>

それは印刷します:

string(3) "foo"
bool(true)
于 2010-06-04T14:10:42.797 に答える
0

両方のファイルに開始タグと終了タグがあると思いますか? インクルードに関する PHP のドキュメントでは、これについていくつか言及されています。そのページの例 #5 を確認してください。

includerequire、およびすべて同じ機能を持っているように見えますがrequire_once、require は警告の代わりにエラーを出力し、require_once はファイルを重複インクルードしません。

于 2010-06-04T14:15:38.930 に答える
-1

インクルードと一緒に使用しないでくださいreturn。anting を返さず、変数を割り当てません。

于 2010-06-04T14:26:35.610 に答える