我对PHP名称空间有一个令人生气的问题应该非常简单,但已经消耗了大约一天的工作量。
这是布局:
目录结构:
/site
/classes
/cache.php
/index.php
cache.php如下:
<?
namespace {
class Cache {...}
}
?>
index.php包含:
<?php
namespace {
\Cache::get()->activate();
}
?>
我尝试了大约一百万种不同的命名空间方式,但是index.php永远不会看到Cache类。当然这需要大约5秒才能搞清楚,对吧?
谢谢!
编辑:
感谢您的建议!
我已经使用以下代码创建了一个cachetest.php页面:
namespace {
set_include_path(get_include_path() . PATH_SEPARATOR . './classes');
set_include_path(get_include_path() . PATH_SEPARATOR . './libraries/oauth-php');
spl_autoload_register(function ($name) {
spl_autoload($name);
});
$cache = \Cache::get();
}
还有一个&#34;致命错误:Class&#39; Cache&#39;找不到&#34;但错误。如此奇怪,因为自动加载器会在同一目录中注册其他类而没有问题。
答案 0 :(得分:0)
你有两个问题。
这里根本没有名称空间。这是您声明命名空间的方式:http://www.php.net/manual/en/language.namespaces.definition.php
您没有自动加载器。您必须require_once('../classes/Cache.php);
或制作(最好是PSR兼容的)自动加载器脚本,并使用spl_autoload_register()
进行注册。
答案 1 :(得分:0)
结果证明,Windows上的PHP对奇怪的控制字符或其他东西非常敏感。我最终通过注释掉文件中的每一行来解决类解析问题,然后小心地将它们切割并粘贴回来 - 这似乎消除了任何隐藏的垃圾让自动加载器无法做到这一点。太可怕了。