這是模型類定義代碼
5, 'totalCount' => $query->count(), ]); $countries = $query->orderBy('name') ->offset($pagination->offset) ->limit($pagination->limit) ->all(); return $this->render('index', [ 'countries' => $countries, 'pagination' => $pagination, ]); }}
**這是調用模型類的控制器代碼
請問模型類裡面明明namespace是app\models,那麼為什麼控制器裡面要use app\models\Country而不是use app\models呢?
這是因為在他之前還有其他use語句還是因為什嗎?我看了很多關於php命名空間的教程都沒講到過這個問題,求各位大神解答。**
回複內容:
這是模型類定義代碼
5, 'totalCount' => $query->count(), ]); $countries = $query->orderBy('name') ->offset($pagination->offset) ->limit($pagination->limit) ->all(); return $this->render('index', [ 'countries' => $countries, 'pagination' => $pagination, ]); }}
**這是調用模型類的控制器代碼
請問模型類裡面明明namespace是app\models,那麼為什麼控制器裡面要use app\models\Country而不是use app\models呢?
這是因為在他之前還有其他use語句還是因為什嗎?我看了很多關於php命名空間的教程都沒講到過這個問題,求各位大神解答。**
php的命名空間是不支援*這種方式的,c#中支援use app.models.*就可以引入model下所有的類,但是php是不支援的(詳情要去看autoload方法,看完就明白了),必須要引入到具體的類
namespace Your\Namespace\Name;use It\Is\Class\Name; //調用這個類,而不是調用一個命名空間use It\Is\Class\MyClass AS OuterClass; //因為MyClass和聲明的類重名,使用AS定義別名/** * 全名 \Your\Namespace\Name\MyClass * extend Name 等價於 extend \It\Is\Class\Name,如果你不寫use It\Is\Class\Name;這句的話 */class MyClass extend Name { use Alert; //調用方法 public function demo() { $obj = new OuterClass(); //相當於 new \It\Is\Class\MyClass() $obj = new Object(); //代表 \Your\Namespace\Name\Object; $obj = new Demo\Object(); //代表 Your\Namespace\Name\Demo\Object; //根據以上兩句你應該明白了,namespace是指明該檔案所處的命名空間,如果按照你的理解 use 後面是命名空間的話,那麼當前檔案就同時隸屬於不同的命名空間了,會發生混亂。 }}trait Alert { //全名為\Your\Namespace\Name\Alert public function vardump() { var_dump($this); }}$obj = new MyClass();$obj->vardump();
注意:
php中use是可以引入類、命名空間或者介面。
所以,這裡直接引入一個類要方便些。