学习php的yii框架_对PHP命名空间(namespace)的理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LongHitler/article/details/83932571

对PHP命名空间(namespace)的理解

PHP命名空间的作用、为什么使用命名空间?

命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误。这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀。
举个栗子:项目中有两个模块:article和message board,它们各自有一个处理用户留言的类Comment。之后我可能想要增加对所有用户留言的一些信息统计功能,比如说我想得到所有留言的数量。这时候调用它们Comment提供的方法是很好的做法,但是同时引入各自的Comment类显然是不行的,代码会出错,在另一个地方重写任何一个Comment也会降低维护性。那这时只能重构类名,我约定了一个命名规则,在类名前面加上模块名,像这样:Article_Comment、MessageBoard_Comment
可以看到,名字变得很长,那意味着以后使用Comment的时候会写上更多的代码(至少字符多了)。并且,以后如果要对各个模块增加更多的一些整合功能,或者是互相调用,发生重名的时候就需要重构名字。当然在项目开始的时候就注意到这个问题,并规定命名规则就能很好的避免这个问题。另一个解决方法可以考虑使用命名空间。

使用规范

namespace必须声明在所有代码的最前面。

在同一个文件中定义多个命名空间。建议使用下面的大括号形式的语法。在实际的编程实践中,非常不提倡在同一个文件中定义多个命名空间。这种方式的主要用于将多个 PHP 脚本合并在同一个文件中。

namespace后命名的定义不区分大小写。

使用例子

index.php

<?php
use controller\Controller;
spl_autoload_register(function ($class){
	require $class . '.php';
})
$conn = new Controller();
$conn->model();
?>

Controller.php

<?php
namespace controller;
use model\Model;
class Controller
{
	public function model()
	{
		$model = new Model();
		return $model;
	}
}
?>

Model.php

<?php
namespace model;
class Model{}
?>

范围解析操作符 (::)
范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员,类常量,还可以用于覆盖类中的属性和方法。

总结

namespace就是划分领域的作用,代表这些东西是属于某个命名空间下的。
use就是起小名的作用,不论写起来还是说起来都可以省不少事儿。

猜你喜欢

转载自blog.csdn.net/LongHitler/article/details/83932571
今日推荐