ここには2つの質問があるようです:
- パスを生成する方法 (手動と発見)
- / を DS と比較した場合の費用対効果
パスの生成
手短に言えば、ハードコーディングされたものと同様に、検出されたパスは手動パスよりも用途が広いということです。アプリケーションを移動する場合は、各手動パスにアクセスして、新しい場所に合わせて変更する必要があります。
一方、既知のファイルの場所からアプリケーションをブートストラップする場合は__DIR__
、そのファイルで を使用して、必要なすべての検出されたパスを固定できます。アプリケーション全体を移動しても、そのまま機能し続けます。
ディレクトリセパレータ
最近では、Windows でスラッシュを使用できます。ただし、おそらくそうしたくないエッジケースがいくつかあります。特に、後でパスを一致させる場合。realpath
Windows では常にバックスラッシュを返し、*nix ではスラッシュを返します。したがって、(スラッシュが原因で) 一致しない 2 つの文字列を作成して、Windows 上の同じファイルにアクセスすることができますが、幸いなことに *nix では実際にはできません。
ただし、使用しているシステムに関係なく、スラッシュを使用しrealpath
て常に適切なセパレーターを取得できます。
ベスト プラクティス
可能な限り検出を使用し、相対パスを検出するときは、それらをrealpath
呼び出しでラップします。
SomeApplicationRootFile.php
/**
* This makes our life easier when dealing with paths. Everything is relative
* to the application root now.
*/
chdir(dirname(__DIR__));
defined('DS')?null:define('DS',DIRECTORY_SEPARATOR);
defined('SITE_ROOT')?null:define('SITE_ROOT', __DIR__);
defined('LIB_PATH')?null:define('LIB_PATH',
realpath(__DIR__ . '/../home/public_html/includes');