首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php自动加载器致命错误:找不到类

php自动加载器致命错误:找不到类
EN

Stack Overflow用户
提问于 2012-06-20 02:18:33
回答 1查看 5.7K关注 0票数 3

我使用PHP与我的小ActiveRecord框架,其中包括一个自动加载器。例如,在我的控制器中,我访问模型Pub::find(64)。

我的问题是Pub::find(64)继承了控制器的名称空间,我得到了错误

代码语言:javascript
复制
Fatal error: Class 'App\Controllers\Pub' not found in /home/i554246/public_html/mvc/App/Controllers/Index.php on line 27

Pub是模块名称。该文件包含在ok中。我可以通过附加\Pub::find(64)来解决这个问题,但对于项目中的新人来说,这并不是很直观。

有没有办法在不更改该行的情况下停止为Pub::find(64)添加名称空间?

索引控制器

代码语言:javascript
复制
namespace App\Controllers;

class Index extends \Core\Controller
{
    protected
        $title = 'Home'
        ;

    /**
     * Default action
     */
    public function index()
    {
        // Pass the data to the view to display it
        $this->view->set('testdb', \Pub::find(64));

    }
}

App.php

代码语言:javascript
复制
/**
 * Class autoloader
 * @param $className
 * @see https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
 */
public function autoload($className)
{
    preg_match('/(^.+\\\)?([^\\\]+)$/', ltrim($className, '\\'), $match);

    //Build namespace Autoloading
    $file = str_replace('\\', '/', $match[1]) . str_replace('_', '/', $match[2]) . '.php';

    //Build Model path
    $model = 'App/Models/' . $match[2] . '.php';

    if ( is_file($file) ) {
        require $file;
    }elseif ( is_file($model) ) {
        require $model;
    }

}

模型/Pub.php

代码语言:javascript
复制
class Pub extends ActiveRecord\Model
{
}
EN

回答 1

Stack Overflow用户

发布于 2012-07-05 07:16:02

您似乎不了解名称空间。

由于您使用的是名称空间App\Controllers,因此使用\表示全局名称空间。因此,如果您不想使用完全限定名称\Pub,则必须将use声明放在名称空间下面,例如:

代码语言:javascript
复制
namespace App\Controllers;
use Pub;

PS:把你的模型也放在一个命名空间里也是一个很好的做法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11106935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档