/*
* 命名空间的声明与使用
* 1.使用关键字:namespace
* 2.php5.3+
* 3.namespace 之前不能有除了declare和注释之外的任何代码,html也不行
* 4.命名空间默认从全局开始定位,全局空间用\表示,类似于根目录
* 5.如果当前脚本声明了命名空间,则所有成员的访问,就必须使用命名空间,包括系统函数
*/
show().'
'; echo get(),'
'; //当前空间 echo '当前的命名空间:'. __NAMESPACE__.'
'; //也可以带上当前的命名空间来访问当前空间代码 $namespace = __NAMESPACE__.'\demo1'; echo (new $namespace)->show().'
'; //输出test空间下的的内容,带上\从根目录开始 // 专业术语:完全限定名称 echo \test1\get().'
'; echo demo1::TEYP,'
'; /* * 3.跨空间访问代码:跨空间访问和跨目录访问文件是一样的,都要带上完整的空间路径 */ echo \test\demo1::TEYP.'
'; echo \test\get().'
'; echo \test\demo1::class.'
'; echo (new \test\demo1())->show().'
'; echo namespace\get().'
'; /* * 4.在命名空间的脚本中,如何访问系统预定的函数? * 例如声明一个变量 $string; */ $string = '北京欢迎你!'; print_r($string); \print_r($string); echo '
'; //之前我们说过在空间里访问全局空间的代码要加\,这里没有加为什么可以? //因为如果用户没有\,计算机首先会在本空间查找var_dump()函数,如果没有找到就会去全局空间查找,所以不报错; //如果用户在当前空间也创建了一个var_dump()函数,则只会执行本空间定义的,不会执行系统预定义的 function print_r($string) { echo $string; } print_r('这是test1空间的print_r函数'); echo '
'; //事实上2个完成的调用语句应该这样写 \print_r($string);//系统预定义函数 echo '
'; \test1\print_r('test1空间的print_r函数');
点击 "运行实例" 按钮查看在线实例
/*
* 如何让全局代码和用户自定义命名空间的代码和平共处
* 1.全局代码:之前我用/表示
* 2.用户代码:用namespace进行标识
* 3.用户自定义命名空间:空间标识符后又一对花括号,属于该空间的代码都放里面
* 4.全局空间代码:使用一个没有标识符namespace 关键字后面跟一对花括号即可,将代码放在这对没有标识符的括号里面
*
*/
name;//不能访问 //声名一个命名空间test4 namespace test4{ class demo2 { const HOST = 'localhost'; public $name='php'; } function set() { return 'test4\set方法'; } //在test4空间如果访问test3空间的代码是不可以的 //echo (new \test3\demo2())->name; echo (new demo2())->name.'
'; } //全局命名空间 namespace { //默认全局全局空间,不用加\ echo test3\demo2::HOST.'
'; echo test4\set().'
'; }
点击 "运行实例" 按钮查看在线实例
/**
* 命名空间的分层管理
* 非限定名称:空间成员名称前不适用空间前缀,类似当前目录访问
*/
'; //限定名称:类似相对路径 自动添加前缀test echo '限定名称:'.(new test1\demo1)->name,'
'; //声名一个命名空间test1 为test的子类 namespace test\test1; class demo1{ function show() { return '这是test命名空间下demo1类的show方法'; } const TEYP = 'PHP'; public $name='php'; } function get() { return 'test下面的get方法'; } //完全限定名称:相当于绝对路径 echo (new \test\demo1())->show();
点击 "运行实例" 按钮查看在线实例
/**
* 使用别名导入命名空间
* 使用关键字use
*/
name.'
'; echo 'test\one\model空间下add方法:'.model\add(10,15).'
'; echo 'test\view空间下类的常量:'.demo::TYPE; //声名一个子命名空间 namespace test\one\model; class demo4{ public $name = 'mysql'; const TYPE = 'int'; } function add($a,$b) { return $a*$b; } namespace test\view; class demo4{ public $name = 'javascript'; const TYPE = 'varchar'; } function add($a,$b) { return $a/$b; }
点击 "运行实例" 按钮查看在线实例