基於complex857的建議,我想出了這個解決方案:
我創造了在圖書館的主目錄中的類,設置了自動加載的庫命名空間。 它也決定了庫的位置(假設庫和使用它的代碼都在同一個文檔根下)。 這個類是圖書館用戶必須明確包含的唯一一個。 它看起來像這樣:
<?php
namespace vendor\lib;
class Includer
{
public static $libUrl;
public static $libPath;
public static function getUrl($dir)
{
$url = substr($dir, strlen($_SERVER['DOCUMENT_ROOT'])); // remove root prefix from dir
return str_replace('\\', '/', $url) . '/'; // windows...
}
public static function registerNamespaceAutoload($namespace, $path)
{
// some code to register autoload for given namespace using given path
}
}
// determine library location
Includer::$libUrl = Includer::getUrl(dirname(dirname(__DIR__))); // lib's top level dir (two levels up relative to vendor\lib\Includer)
Includer::$libPath = str_replace('/', DIRECTORY_SEPARATOR, $_SERVER['DOCUMENT_ROOT'] . Includer::$libUrl);
// register autoload for library
Includer::registerNamespaceAutoload('vendor\\lib\\', Includer::$libPath);
?>
使用獲得的URL位於供應商/ lib目錄/圖像的圖像/:
<?php
namespace vendor\lib\images;
use vendor\lib\Includer;
class Image
{
public static function getUrl($fileName)
{
return Includer::$libUrl . 'vendor/lib/images/' . $fileName;
}
}
?>
缺點:使用別名(在開發環境中時,這不起作用)。
謝謝你提出這些寶貴的建議! – thofou76