PHPで知っておくべきrequire()ファイルの正しい使い方


以前、PHPのフレームのソースコードを見た時、ファイルに含まれている時、dirnameを使いました。FILE_ファイルのパスをかき集めに来ましたが、このようにすれば何の利益があるか分かりません。
簡単な例を紹介します。
a,b,cの三つのphpファイルがあります。a.phpはウェブサイトのルートのディレクトリで、b.phpはbフォルダの下で――b/b.php、c.phpはcフォルダの下で――c/c.php。混乱していますか?図を見れば一目瞭然です。

a.phpとb.phpはすべてc.phpを含んで、最後にc.phpはdフォルダの下の一つのphpファイル――d/d.phpを含みました。
まずa.phpに来ます。

<?php 
  $file_name = 'a.php';
  echo "this is a.php";
  echo "<hr>";
  require('c/c.php');
 ?>
簡単なコードです。プリントアウト後、c/c.phpが含まれています。続いて、c/c.phpを見たいです。

<?php 
  $c_file_name = 'c.php';
  echo 'this is c.php, is required by ' . $file_name;
  echo "<hr>";
  require('../d/d.php');
 ?>
プリント出力「this is c.php,is required by a.php」、file_nameはa.phpで定義された変数です。最後にd.phpが含まれています。dフォルダは現在のc.phpファイルの上の階にありますので、通常通りにパスを「./d/d.php」と書くのは当たり前です。でも、残念です。間違えます。なぜなら、含まれているファイルの中にc.phpなどの他のファイルが含まれているからです。経路は一番外側の親ファイルに対して、つまりa.phpに対して、あなたが私に含まれているからです。だから、私を基準にしてください。玄人に見えますが、原理は簡単です。require('c/c.php')を使えます。c/c.phpファイルのコードと見られていますが、a.phpはこのように見えます。

<?php 
  $file_name = 'a.php';
  echo "this is a.php";
  echo "<hr>";
  // require('c/c.php');
  $c_file_name = 'c.php';
  echo 'this is c.php, is required by ' . $file_name;
  echo "<hr>";
  require('../d/d.php');
 ?>
ここで、私たちがd/d.phpファイルを含むとき、先ほどのパスは間違っていませんか?なぜならば、今はa.phpのコードの中で、私達はa.phpファイルに対して、もちろん、経路はrequire('d/d.php')であるべきです。はい、そうです。コードを修正します。

<?php 
  $file_name = 'a.php';

  echo "this is a.php";
  echo "<hr>";

  // require('c/c.php');
  $c_file_name = 'c.php';

  echo 'this is c.php, is required by ' . $file_name;
  echo "<hr>";

  require('d/d.php');
 ?>
この時、あなたはまだ深い意味を悟っていません。下を見てください。またb/b.phpを見ます。

<?php 
  $file_name = 'b.php';
  echo "this is b.php";
  echo "<hr>";
  
  require('../c/c.php');
 ?>
説明はいらないでしょう。大丈夫です。でも、require('./c.php');c/c.phpのコードに変えると、問題が発見されます。注意してください。先ほどc/c.phpのコードを修正しました。require('./d/d.php');require('d/d.php')に変えました。下を見てください。入力後のコードが含まれています。

<?php 
  $file_name = 'b.php';
  echo "this is b.php";
  echo "<hr>";
  
  // require('../c/c.php');
  $c_file_name = 'c.php';
  echo 'this is c.php, is required by ' . $file_name;
  echo "<hr>";
  require('d/d.php');
 ?>
それでは、b/b.phpに対してrequire('d/d.php')のパスが間違っています。require('./d/d.php')であるべきです。そうです。c/c.phpの中のrequireパスを修正しますが、違います。変えたらb/b.phpは正常に運行できますが、a/a.phpはもうだめです。c/c.phpを共有して、全身を引っ張ってどうすればいいですか?
この時、私たちは冒頭のdirnameに戻ります。FILE_,これはいいものです。以上の問題を完全に解決できます。これを使えば、あなたを含むファイルはどのファイルですか?どのパスの下にあるかに関心を持たなくてもいいです。親のファイルのレベルを気にする必要はないです。FILE_現在のファイルに対してパスを指定できます。つまり、私達は私達のc/c.phpの中のrequireパスを変えたいです。

<?php 
  $c_file_name = 'c.php';

  echo 'this is c.php, is required by ' . $file_name;
  echo "<hr>";

  require(dirname(__FILE__) . '/../d/d.php');
 ?>
ここでは、c/c.phpだけを参照として、d/d.phpは上の階にあります。このように、一つの基準しかありません。つまり、私を基準にして、あなたが私を含むか、それとも彼が私を含むかを管理します。私は自分だけを基準にして、私が含めたい書類は自分だけに対して言います。
dirnameに対してFILE_分からないのは修理して、googleを下さい、とても簡単です。
はい、PHP技術の共有はこれで終わります。何か疑問や間違いがありましたら、メッセージをお願いします。ところで、これは私の最初の標準技術ブログです。第一篇は水文で、第二編は準技術で、今日やっと技術を書きました。