2017-01-02 105 views
1

我正在嘗試使用PHP的特性功能和命名空間來組織我的項目代碼和文件。致命錯誤:在自定義路徑中找不到名稱空間類

但我不知道爲什麼我得到這個

Fatal error: Class 'ModernPHP\News' not found in E:\www\modernphp\test.php on line 11.

有我的文件在同一目錄下。我只有一個目錄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; 

---添加在Jan.06.2016 ---

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

您在哪裏包含文件? – Thamilan

+0

名稱空間不需要包含文件。 – user39291

+0

@ user39291這是不正確的;您仍然需要自動加載或明確包含這些文件。 –

回答

3

您在namespace ModernPHP\News中定義了您的類News(請參閱News.php的第一行)。這意味着具有名稱空間的類是ModernPHP\News\News,而不是ModernPHP\News

你要麼意味着定義namespace ModernPHPNews(與namespace ModernPHP;更換namespace線News.php),或者你需要use ModernPHP\News\News;在你的ModernPHP定義。

此外,您需要一個自動加載器或明確的include/require語句來加載您的類和特徵文件。如果您尚未加載News.php文件或告訴PHP如何操作,則不能簡單地執行new News(...)

+0

我已將其更改爲您的答案,但不會產生任何效果。 – user39291

+0

@ user39291你做了哪些改變? –

+0

我更改了命名空間ModernPHP \ News;在New.php文件中命名空間ModernPHP; – user39291

0

請確保您的命名空間還有子文件夾

namespace ModernPHP\News; 

你需要一個文件夾ModernPHP與子文件夾新聞,在這個子文件夾是你的課程新聞。然後,您可以使用該類:

use ModernPHP\News\News; 
+0

我刪除行中的新聞:命名空間ModernPHP \ News,但我仍然得到相同的錯誤。 – user39291

相關問題