批改状态:合格
老师批语:命名空间在以后我们会大量的使用, 而且是第一行代码, 如果不懂, 基本没法写下去
namespace user1{class Demo1{const NAME = '这是user1下的Demo1';}}namespace user2{class Demo1{const NAME ='这是user2下的Demo1';}//访问另一个空间的成员,必须使用完全限定名称,根目录用'\'表示//访问user1下的类echo \user1\Demo1::NAME.'<br>';//非限定名称:在访问空间成员前面没有命名空间echo Demo1::NAME.'<br>';//限定名称:不是从根目录找起,访问成员前至少有一个命名空间,从当前位置找起echo user3\Demo1::NAME;//当前空间没有该函数,会到全局空间去找echo write();}namespace user2\user3{class Demo1{const NAME ='这是user3下的Demo1';}}//创建一个全局的空间,匿名空间namespace{function write(){return '我是在全局空间的函数';}}

namespace ns1{class A1{public static function write(){return 'A1的方法';}}}namespace ns2{class A2{public static function write(){return 'A2的方法';}}}namespace{ //给ns1空间起别名use ns1 as T;//给ns2空间的A2类起别名//use ns2\A2 as A2;//当类名和别名一样是可以简写use ns2\A2;echo T\A1::write().'<br>';echo A2::write().'<br>';}
__DIR__:文件所在的目录DIRECTORY_SEPARATOR:系统分隔符
//注册自动加载器spl_autoload_register(function($className){ //将类名中的命名空间的分隔符转化为目录分隔符$path = str_replace('\\',DIRECTORY_SEPARATOR,$className);//生成文件名称$file=__DIR__.DIRECTORY_SEPARATOR.$className.'.php';//加载文件require $file;});//要加载的文件的处理//要实现自动加载要满足的条件//1.命名空间必须与类文件所在的绝对路径一致//2.当前类名与当前类文件名一致//namespace inc\lib//{// class Demo1// {// public static function write()// {// return '这是1';// }// }//}use inc\lib\Demo1;use inc\lib\Demo2;echo Demo1::write().'<br>';echo Demo2::write();

基本了解了命名空间的三种访问形式完全限定名称,限定名称和非限定名称,命名空间可以避免组件加载时的命名冲突,自动加载很好的解决了需要加载多个文件就要写多个require的问题。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号