ホームページ > バックエンド開発 > PHPチュートリアル > PHP_PHPチュートリアルのrequire_once()関数の相対ディレクトリに注意してください

PHP_PHPチュートリアルのrequire_once()関数の相対ディレクトリに注意してください

WBOY
リリース: 2016-07-13 10:55:50
オリジナル
923 人が閲覧しました

クラスが再定義されたことを依然として伝えるために require_once を使用する問題について話しました。そこで私は数日前に遭遇した現象を思い出した。今日、調査の具体的な理由を思い出したので、ここで言わせてください。言わなければ忘れてしまうでしょう。私は脳を介さずにすべてを行っているようです。脳の二次キャッシュ、メモリ、さらにはハードドライブさえも哀れなほど小さいです。うーん。

次の 3 つのファイル c.php a.php b.php があり、対応するストレージ ディレクトリが localhost/localhost/localhost/demo であるとします。

コードは次のとおりですコードをコピーc.php
require_once("a.php");
require_once("demo/b.php");
B::demo();a.php
クラスA
{
}
b.phpの内容はCLASS Aを継承しているのでさらに興味深いので、a.phpも導入してみました

コードは次のとおりですコードをコピーrequire_once("../a.php");
クラス B は A を拡張します
{
パブリック静的関数demo()
{
エコー「xx」;
}
}
localhost/c.php を実行すると、システムは次のようなエラーを報告します

。 警告: require_once(../a.php) [function.require-once]: ストリームを開けませんでした: F:wwwdemob.php の 2 行目にそのようなファイルまたはディレクトリはありません
致命的なエラー: require_once() [function.require]: F:wwwdemob.php の 2 行目で、必要な '../a.php' (include_path='.;C:php5pear') を開くことができませんでした。 b.php の require_once ステートメントを削除すると、正常に実行されるので、定義された require_once ステートメントが多すぎるのでしょうか。理由は、クラス A が 2 回再定義されたためですか?しかし、そうではありません。 c.php に require_once(‘a.php’); を追加するだけなら、2 回書いても正しくなります。
その理由は、b.php で定義されたディレクトリ レベルが c.php 実行ファイルのディレクトリ レベルと一致せず、その結果、c.php に 2 つの require_once ステートメントが発生するためです。
と同等にする

コードは次のとおりですコードをコピーrequire_once("a.php");
require_once("../a.php");
クラス B は A を拡張します
{
パブリック静的関数デモ()
{
エコー「xx」;
}
}
B::デモ();
原因が分かりました。c.phpでは相対ディレクトリ「..」がc.phpの上層にあるため、ファイルが見つからないとエラーになってしまいます。

したがって、PHP で require_once を使用する場合、異なる階層関係が存在するため、相対ディレクトリの使用には注意が必要であるという結論になります。

http://www.bkjia.com/PHPjc/632201.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632201.html技術記事 require_once を使用してクラスに再定義を指示することの問題について話します。そこで私は数日前に遭遇した現象を思い出した。ここで言わせてください、今日調査の具体的な理由を思い出しました…
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート