我正在爲我的一個庫編寫一個路由器類。 這個類將保留一些路徑的位置,但我想知道是否應該使用'智能'絕對路徑,相對路徑或兩者(對於這種情況)將是相同的事情。PHP:'智能'絕對路徑vs相對路徑
Obs.1:當我寫'智能'絕對路徑是因爲即使管理員將庫移動到另一個位置,此絕對路徑也可以工作。 Obs.2:Stack有關於這個話題的其他問題,但看起來他們不是關於我在找什麼,所以我做了這個問題。
第一溶液:
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)."/";
}
}
第二溶液:
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`
,第二個將使用像鏈接:
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)是與我無關。
那麼,我應該使用什麼解決方案,爲什麼?有沒有更好的方法來做到這一點(如果是的話,請寫一個路由器類替代)?
我喜歡儘可能使用絕對值,但我很想聽聽其他人的推理。 – Sam
當爆炸路徑時(假設你的庫可以在Windows系統上運行),你應該使用'DIRECTORY_SEPARATOR' – Uby
好的軟件Uby,我會編輯 – GarouDan