【问题标题】:"class not found" error in PHP with double-slashes (\\)带有双斜杠 (\\) 的 PHP 中的“找不到类”错误
【发布时间】:2015-11-12 01:38:33
【问题描述】:

我正在使用命名空间的 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'。

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

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

【问题讨论】:

    标签: php namespaces


    【解决方案1】:

    这不是错误,它只是 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();
    }
    

    【讨论】:

    • 谢谢!我没想到它会在实际输出中显示转义斜线。我是根据现有的相似性来编写这段代码的……我猜他们可能正在使用自动加载器路线,这意味着我现在需要寻找它的位置。你帮我省了很多麻烦!谢谢!
    • 如果您不在 Windows 上,请注意区分大小写。如果你使用一个类作为Foo\bar\Baz,PHP 会寻找那个,而错过Foo\Bar\Baz
    猜你喜欢
    • 2013-08-24
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    相关资源
    最近更新 更多