时髦的PHP命名空间无法解析

时间:2014-03-11 22:18:56

标签: php namespaces

我对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;但错误。如此奇怪,因为自动加载器会在同一目录中注册其他类而没有问题。

2 个答案:

答案 0 :(得分:0)

你有两个问题。

  1. 这里根本没有名称空间。这是您声明命名空间的方式:http://www.php.net/manual/en/language.namespaces.definition.php

  2. 您没有自动加载器。您必须require_once('../classes/Cache.php);或制作(最好是PSR兼容的)自动加载器脚本,并使用spl_autoload_register()进行注册。

答案 1 :(得分:0)

结果证明,Windows上的PHP对奇怪的控制字符或其他东西非常敏感。我最终通过注释掉文件中的每一行来解决类解析问题,然后小心地将它们切割并粘贴回来 - 这似乎消除了任何隐藏的垃圾让自动加载器无法做到这一点。太可怕了。