致命错误:在自定义路径中找不到命名空间类

时间:2017-01-02 06:18:14

标签: php

我正在尝试使用PHP的特征功能和命名空间来组织我的项目代码和文件。

但我不知道为什么会得到这个

  

致命错误:第11行的E:\ www \ modernphp \ test.php中找不到“ModernPHP \ News”类。

我的文件在同一目录中。我只有一个目录modernphp;这三个文件超出了这个目录。

我是否滥用名称空间?还是别的什么?

mysql.trait.php

<?php
namespace ModernPHP;

trait db_connect
{

    protected $host;
    protected $user;
    protected $pwd;
    protected $db;

    protected $connect;

    public function __construct($host, $user, $pwd, $db)
    {
        $this->host = $host;
        $this->user = $user;
        $this->pwd = $pwd;
        $this->db = $db;
    }

    public function connect()
    {
        $this->connect = mysqli_connect($this->host, $this->user, $this->pwd);
        mysqli_select_db($this->connect, $this->db);
    }

    public function query($table, $arr_fields = array(), $order_by = false)
    {

        $sql = 'SElECT * FROM {$table}';

        return mysqli_query($this->connect, $sql);
    }
}

News.php

<?php
namespace ModernPHP\News;

    class News
    {

        use mysql;

        /*
        public function __construct()
        {
            //$db = new m
        }
        */

        public function latestNews()
        {

        }

    }

test.php的

<?php

namespace ModernPHP;

    use ModernPHP\News;

    class test {

        public function __construct()
        {
            $news_object = new News('localhost', 'root', '', 'invo');

            print_r($news_object);
        }
    }

    $test = new Test;

---于2016年1月6日加入---

class ComposerAutoloaderInita3585bdd4dd862cdaf5a9a8f6faaa488
{
    private static $loader;

    public static function loadClassLoader($class)
    {
        if ('Composer\Autoload\ClassLoader' === $class) {
            require __DIR__ . '/ClassLoader.php';
        }
    }

    public static function getLoader()
    {
        if (null !== self::$loader) {
            return self::$loader;
        }

        spl_autoload_register(array('ComposerAutoloaderInita3585bdd4dd862cdaf5a9a8f6faaa488', 'loadClassLoader'), true, true);
        self::$loader = $loader = new \Composer\Autoload\ClassLoader();

2 个答案:

答案 0 :(得分:3)

您在News中定义了您的班级namespace ModernPHP\News(请参阅News.php的第一行)。这意味着具有命名空间的类是ModernPHP\News\News,而不是ModernPHP\News

您要么在News中定义namespace ModernPHP(用namespace替换News.php中的namespace ModernPHP;行,或者您需要use ModernPHP\News\News; ModernPHP的定义。

此外,您需要自动加载器或显式include / require语句来加载类和特征文件。如果您尚未加载News.php文件或告诉PHP如何执行此操作,则不能简单地执行new News(...)

答案 1 :(得分:0)

确保您还拥有命名空间的子文件夹 例如

namespace ModernPHP\News;

你需要一个带有子文件夹News的文件夹ModernPHP,在这个子文件夹中是你的班级新闻。然后,您可以将该类用于:

use ModernPHP\News\News;