1

私は次のphpようなことを教えてくれるチュートリアルを行いました:

defined('DS')?null:define('DS',DIRECTORY_SEPARATOR);
defined('PUBLIC_PATH')?null:define('PUBLIC_PATH','http://www.myurl.com/');
defined('SITE_ROOT')?null:define('SITE_ROOT',DS.'home'.DS.'public_html'.DS.'myhome');
defined('LIB_PATH')?null:define('LIB_PATH',DS.'home'.DS.'public_html'.DS.'includes');

次に、次のようなことができます。

require_once (LIB_PATH. DS .'initialize.php');

_DIR_上記のように手動でパスを綴る代わりに、使用できると言われました。

これは本当ですか?それぞれの方法の利点/欠点は何ですか?

4

1 に答える 1

1

ここには2つの質問があるようです:

  • パスを生成する方法 (手動と発見)
  • / を DS と比較した場合の費用対効果

パスの生成

手短に言えば、ハードコーディングされたものと同様に、検出されたパスは手動パスよりも用途が広いということです。アプリケーションを移動する場合は、各手動パスにアクセスして、新しい場所に合わせて変更する必要があります。

一方、既知のファイルの場所からアプリケーションをブートストラップする場合は__DIR__、そのファイルで を使用して、必要なすべての検出されたパスを固定できます。アプリケーション全体を移動しても、そのまま機能し続けます。

ディレクトリセパレータ

最近では、Windows でスラ​​ッシュを使用できます。ただし、おそらくそうしたくないエッジケースがいくつかあります。特に、後でパスを一致させる場合。realpathWindows では常にバックスラッシュを返し、*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');
于 2013-09-12T18:07:55.503 に答える