私のライブラリの Router クラスを書いています。このクラスはいくつかのパスの場所を保持しますが、「インテリジェントな」絶対パス、相対パス、またはその両方 (この場合) を使用する必要があるかどうかは疑問です。
Obs.1: 「インテリジェントな」絶対パスを書いたのは、管理者がライブラリを別の場所に移動しても、この絶対パスが機能するためです。
Obs.2: スタックにはこのトピックに関する他の質問がありますが、それらは私が探しているものではないように見えるので、質問しました。
最初の解決策:
MyVendor/src/class/MyVendor/MyNamespace/Router.php
「インテリジェントな」絶対パスの使用
namespace MyVendor\MyNamespace;
class Router
{
private $root;
private $cache;
public function __construct()
{
$this->setRootPath();
$this->cache = "{$this->root}var/cache/";
}
public function setRootPath()
{
$currentDir = __DIR__;
$exploded = explode("/", $currentDir);
array_pop($exploded); // Removing MyNamespace
array_pop($exploded); // Removing MyVendor
array_pop($exploded); // Removing class
array_pop($exploded); // Removing src
$this->root = implode("/", $exploded)."/";
}
}
2番目の解決策:
MyVendor/src/class/MyVendor/MyNamespace/Router.php
相対パスの使用
namespace MyVendor\MyNamespace;
class Router
{
private $root;
private $cache;
public function __construct()
{
$this->setRootPath();
$this->cache = "{$this->root}var/cache/";
}
public function setRootPath()
{
$this->root = __DIR__."/../../../../";
// ..(pointing to MyVendor)/..(pointing to class)/..(pointing to src)/..(pointing to the root, MyVendor)
}
}
Obs.3: 最初の解決策が次のようなリンクを使用することを確認してください。
root => `/var/www/myproject/vendor/MyVendor/`
cache => `/var/www/myproject/vendor/MyVendor/var/cache`
2 つ目は次のようなリンクを使用します。
root => `/var/www/myproject/vendor/MyVendor/src/class/MyVendor/MyNamespace/../../../../`
cache => `/var/www/myproject/vendor/MyVendor/src/class/MyVendor/MyNamespace/../../../../var/cache/`
Obs.4: 初期処理 (array_pop を使用) は私には関係ありません。
では、どのソリューションを使用する必要があり、その理由は何ですか? これを行う別のより良い方法はありますか (はいの場合は、Router クラスの代替を作成してください)。