基于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