2016-06-12 8 views
0

私は現時点ではphp/mysqlを学んでおり、チュートリアルの後についています。 これはAUtolodingと名前空間に関するものです。オートローディングと名前空間に問題があります。

私のコードは以下のようになります。私は自分の名前でファイルをsperateます。

Folders : 
mysite/ 
    app/ 
     Autoloader.php 
     Database.php 
    pages/ 
     home.php 
     single.php 
     Template/ 
     default.php 
    public/ 
     index.php 

マイコード: /public/Index.php ================================= ===========

<?php 
require '../app/Autoloader.php'; 
App\Autoloader::register(); 
if (isset($_GET['p'])) { 
    $p = $_GET['p']; 
} else { 
    $p = 'home'; 
} 
ob_start(); 
    if ($p === 'home') { 
     require '../pages/home.php'; 
    } elseif ($p === 'single') { 
     require '../pages/single.php'; 
    } 
$content = ob_get_clean(); 
require '../pages/template/default.php'; 


/app/Autoloader.php ======================= =========================

<?php 
namespace App; 
class Autoloader 
{ 
    static function register() 
    { 
     spl_autoload_register(array(__CLASS__, 'autoload')); 
    } 
    static function autoload($class_name) 
    { 
     if (strpos(__NAMESPACE__, '\\') === 0) { 
      $class = str_replace(__NAMESPACE__, '\\', '', $class); 
      $class = str_replace('\\', '', $class); 
      require __DIR__.'/'.$class_name.'.php'; 
     } 
    } 
} 

/app/Database.php ============ ===========================

<?php 
namespace App; 
use \PDO; 

class Database 
{ 
    private $db_name; 
    private $db_user; 
    private $db_pass; 
    private $db_host; 

    private $pdo; 

    public function __construct($db_name, $db_user = 'root', $db_pass = 'password', $db_host = 'localhost') 
    { 
     $this->db_name = $db_name; 
     $this->db_pass = $db_pass; 
     $this->db_user = $db_user; 
     $this->db_host = $db_host; 
    } 
    private function getPDO() 
    { 
     $pdo = new PDO('mysql:dbname=blog;host=localhost', 'root', 'password'); 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $this->pdo = $pdo; 

     return $pdo; 
    } 

    public function query($statement) 
    { 
     $req = $this->getPDO()->query($statement); 

     $datas = $req->fetchAll(PDO::FETCH_OBJ); 

     return $datas; 
    } 
} 

MYエラーメッセージ:

致命的なエラー:クラス 'のApp \ Databaseは、' Cで見つかりません:\ WAMP \ WWW \はヨハンさんのブログ\ページは\ 3

ラインにhome.phpは、

私はAutoloaderで、彼はDatabase.phpを要求できないと考えています。 しかし、私はどこが間違っているのかわかりません。 私は本当にその名前空間の事を得ていません。

誰もが手掛かりを持っている場合は?事前:) で

おかげで良い一日を!あなたのエラーで

答えて

0

、私たちはあなたのページC:\wamp\www\Johan's Blog\pages\home.phpはクラスのアプリケーション\データベース 'を使用しようとしていることがわかります。

私はこの問題は、あなたの名前空間のパスが同じパスにありますクラスから求めて、ここでは相対的であるということだと思います。 App\Databaseの代わりに絶対パス、\App\Databaseを使用するようにしてください。

は、名前空間が使用されているどれだけ理解し、それがどのように動作するか、それを理解するために重要なことですので、あなたは、簡単なスクリプトはそれが本当にどのように動作するか、自分自身を教えるために行う必要があります。いくつかのチュートリアルの男、それと幸運を読んでみてください:)!

+0

はい私はそれ以来、あなたが言った方法を正確に固定していたことがわかりました。 – legylith

関連する問題