1

私は OOP と名前空間に頭を悩ませていますが、絶対パスと相対パスの理解を混乱させていると思います。次の単純なディレクトリがあるとします。

X +
  A +
    B +
      FileC
    FileB

file_exists($this->filepath)ファイル B には、コンストラクターに呼び出しを含むクラスがあります。と同じディレクトリ内にあるディレクトリFileC内を探しています。BFileB

私が想定していた $filepath は ですがB/FileC、それは false を返します。../B/FileC次に、 falseも試しました。それから私は試し..A/B/FileCます。再び偽。私は真実を得るために出かけなければなりませXん:../X/A/B/FileC

明らかに、私の理解はここから外れています。名前空間がに関係がないことは80%確信していますfile_exists。次の推測では、呼び出し元のオブジェクトは実際のファイル パスに影響を与えるのでしょうか? つまり、FileB のクラスが と同じディレクトリ内の別のフォルダで定義されたクラス内からインスタンス化されている場合A、そのクラスは相対パスを指定しますか?

初心者の質問で申し訳ありません。

4

1 に答える 1

1

これはOOPとは何の関係もありません...

file_exists は現在実行中のパスから実行されます。つまり、

dirname(__FILE__)現在のパスを理解し、現在実行中のパスに関連して、アクセスしようとしているファイルがどこにあるかを理解します。クラス A またはファイル B を使用しているからといって、そのディレクトリで実行していると想定できるわけではありません。

PHPのファイルとパスのみです。

現在のディレクトリは、呼び出しているファイルとそのディレクトリに大きく依存していると思いますが、使用していると思われるインクルード ファイルについてはあまり依存していません。

代わりに絶対パスを (もちろんハードコーディングせずに) 使用するのはどうですか?

$path = dirname(__FILE__) . '/path/to/your/A/B/C'
于 2013-05-26T20:43:48.350 に答える