请教namespace 问题。关于use的用法。 [ 新手入门 ]
<?php
namespace app\controllers;
use yii\web\Controller;
use yii\data\Pagination;
use app\models\Country;
class CountryController extends Controller
{
public function actionIndex()
{
$query = Country::find();
$pagination = new Pagination([
'defaultPageSize' => 5,
'totalCount' => $query->count(),
]);
$countries = $query->orderBy('name')
->offset($pagination->offset)
->limit($pagination->limit)
->all();
return $this->render('index', [
'countries' => $countries,
'pagination' => $pagination,
]);
}
}
上面代码中。
use yii\web\Controller;
use yii\data\Pagination;
use app\models\Country;
使用这种方法导入。需不需要把命名空间文件include进来。再使用yii\web\Controller;。use的作用域是什么?
共 13 条回复
-
好好看下这个,http://php.net/manual/zh/language.namespaces.php
然后,了解一下php的autoload是怎么一回事,然后,你就明白了...
共 1 条回复 -
return [ 'yii\base\Action' => YII2_PATH . '/base/Action.php', 'yii\base\ActionEvent' => YII2_PATH . '/base/ActionEvent.php', 'yii\base\ActionFilter' => YII2_PATH . '/base/ActionFilter.php', 'yii\base\Application' => YII2_PATH . '/base/Application.php', 'yii\base\ArrayAccessTrait' => YII2_PATH . '/base/ArrayAccessTrait.php', 'yii\base\Arrayable' => YII2_PATH . '/base/Arrayable.php', 'yii\base\ArrayableTrait' => YII2_PATH . '/base/ArrayableTrait.php', 'yii\base\Behavior' => YII2_PATH . '/base/Behavior.php', 'yii\base\BootstrapInterface' => YII2_PATH . '/base/BootstrapInterface.php', 'yii\base\Component' => YII2_PATH . '/base/Component.php', ...... ]; 简单的来说,namespace相当于Yii里面的别名,从上一段return的数组来看,可以把namespace抽象成array的key,然后根据key的值去计算获取value,value就是文件的绝对路径,Yii就帮你include
共 1 条回复 -
这个问题乍一看 觉得很简单... 天天都在用的东西 这有什么好说的?
仔细一琢磨, 要想原原本本的说清楚 还真是不知从何说起.
占坑 晚点有空回答
一, 第一个问题, 需不需要把文件导入进来?
答案是 : 需要!
但是在各种框架内, 你不会直观的感受到这一点, 因为都实现自动加载了.
早期
__autoload
后来 又增强版spl_autoload
现代框架都是遵循
composer
自动载入标准完成而
composer
的自动加载标准又和namespace
结合了起来, 这个后面补充.二. 第二个问题,
use
的作用域是什么, 有多广?比如 : 同一个服务器上有
A站和B站
,A站下A\a
,B站有B\b
,还可以在B\b.php
里面use A\a
吗?`答案是 : 不知道怎么回答了 = =! 只能说和几个站毫无关系...
在当前请求周期内, 只要先加载到了
A\a
, 那么随后你都可以use A\a
;这和几个项目没关系, 和文件摆放位置没关系
!!! 只和 当前请求内, 你
use
的时候 有没有事先声明并include进来
有关系;如果非要说出作用域? 只能看
每次请求的实际情况
了...三. 补充
在各种现代框架内(遵循了
composer
标准的)一般 只要你
use A\a
; 就能自动加载进A\a
(当然 你确实有声明);并不用小心翼翼的担心 我
use A\a
时候, 有没有include进来呀因为
composer
就是按照namespace
来自动加载类的.当然并不绝对(未遵循该标准的,
composer
也提供有自动加载方式)具体的标准去查一下资料吧 这里就不说了 已经很啰嗦了
共 1 条回复
go_dxy
最后登录:2020-03-01
在线时长:3小时12分
- 粉丝1
- 金钱35
- 威望0
- 积分65