2017-01-02 12 views
1

PHPの特性と名前空間を使用してプロジェクトのコードとファイルを整理しようとしています。致命的なエラー:自己定義されたパスに名前空間のクラスが見つかりません

しかし、私は私のファイルが同じディレクトリにあります。この

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

を取得する理由を私は知りません。私はちょうどディレクトリmodernphpを持っています。 3つのファイルはこのディレクトリを超えています。

私は名前空間を誤って使用していますか?それとも別のことですか?

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

クラスNewsnamespace ModernPHP\News(News.phpの一番上の行を参照)に定義しました。つまり、名前空間を持つクラスはModernPHP\News\Newsであり、ModernPHP\Newsではありません。

あなたはどちらかnamespace ModernPHPNewsを定義します(namespace ModernPHP;でNews.phpにnamespace行を置き換え)するためのものか、ModernPHPのあなたの定義でuse ModernPHP\News\News;する必要があります。

また、クラスと特性ファイルを読み込むには、オートローダーまたは明示的な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

関連する問題