2015-02-11 38 views
0

我是新來的PHP,並嘗試使用namespace S爲第一次和我有一個很大的PHP文件這個瘋狂的問題(如下簡化):使用類的PHP類方法

B. PHP:

namespace Logic; 

class C {} 
class B {} 

a.php只會:

use Logic\C; 

class A extends \BaseClass { 
    public function __construct() {} 
    // [...500 lines of code...] 
    private function hi() { $c = new C(); } 
} 

hi方法給出了錯誤:Class 'Logic\\C' not found in A.php


但如果我只是在A的構造函數引用B,它按預期工作:

class A extends \Base { 
    public function __construct() { $dummy = new C(); } 
    // [...500 lines of code...] 
    private function hi() { $c = new C(); } 
} 

在上面運行修改後的代碼的hi方法,不存在任何問題。

任何人都可以想到爲什麼發生這種情況的合理解釋?我濫用php中的命名空間?

+0

我有你的代碼沒有問題,但你必須確保使用'喜之前B.php包括( )'方法。 – Furgas 2015-02-11 12:58:24

回答

2

您需要了解,use語句不會自動包含定義Logic\C的源代碼文件。您需要使用自動加載器,或在從該文件訪問類之前手動使用該文件。


我建議遵循關於命名空間(有例子)手動:http://php.net/manual/en/language.namespaces.php

+0

沒有必要使用與導入的類相同的名稱來定義別名。 – 2015-02-11 12:57:25

+0

@ElonThan你是對的,謝謝! – hek2mgl 2015-02-11 13:02:33