PHP中带有双斜杠(\\)的“class not found”错误

时间:2015-08-18 22:54:39

标签: php namespaces

我正在开发一个使用命名空间的php系统。

我有以下代码(显然,摘要).... 一个位置的类,目录为Foo \ Bar \ fubar.php

<?php 
namespace Foo\Bar;
class fubar
{...

我的另一个.php ......

<?php
use Foo\Bar;
use Foo\Bar\fubar;

class adventurer{
    $doomChickens = new fubar();
}

现在,当我检查错误日志时,我得到了......

  

PHP致命错误:未找到类'Foo \\ Bar \\ fubar'。

我是维护者,不是原作者,但总的来说,我是使用的类型包括&amp;需要而不是命名空间。

什么样的错误可能导致双斜线?这可能是我的问题的根源吗?

1 个答案:

答案 0 :(得分:2)

这不是错误,它只是PHP打印出来的方式。您可能知道,对于新行,\n等字符串存在转义序列,而对于制表符,则为\t。好吧,\\\的转义序列。

PHP还会从字面上解释无效的转义序列,因此Foo\Bar只是因为\B不是有效的转义序列。

作为参考,转义序列仅用双引号字符串解析,而不是单引号字符串。

至于解决实际问题,您需要明确includerequire该文件或使用an autoloader。最常见的是PSR-0PSR-4自动加载程序。

顺便说一句,use Foo\Bar;行是不必要的。

第一个解决方案如下:

<?php
require 'path/to/other/class.php';

use Foo\Bar\fubar;

class adventurer{
    $doomChickens = new fubar();
}