批改状态:合格
老师批语:总结的好

<?php// 完全限定名称的类名,限定名称的类名,非限定名称的类名// 命名空间的别名namespace ns1;class T1 {}namespace ns2;class T1 {}namespace ns3;// 访问ns1里的T1// 从当前空间开始访问另一个空间,应该从全局开始// ns1\T1:完全限定名称的类名,类似绝对路径,从根开始echo \ns1\T1::class;echo '<hr>';// 访问ns3\sub::Hello,完全限定名称的类名echo \ns3\sub\Hello::class;echo '<hr>';// 可以省略当前类名相同的部分ns3, \ns3\去掉也是一样的结果,这叫限定名称的类名,类似相对路径echo sub\Hello::class;echo '<hr>';// 访问当前空间类成员,不用加类名称ns3,不需要 echo ns3\Work::class;// 非限定名称的类class Work {}echo Work::class;echo '<hr>';// 访问ns2里的T1,用完全限定访问echo \ns2\T1::class;echo '<hr>';// 简化:访问ns2里的T1。先给空间起个别名,关键字useuse \ns2 as S;echo '别名访问:' . S\T1::class;// use后的关键字必须是完全限定名称的空间或类echo '<hr>';// 给完全限定名称的类起个别名,use \ns2\T1 as Test;echo '别名访问:' . Test::class;echo '<hr>';// 如果别名和类名相同// use \ns2\T1 as T1;// 上面的T1类名一样了,用下面方法一样,可以省略as后面的别名use \ns2\T1;echo '别名访问:' . T1::class;echo '<hr>';// 哪种情况下不能省略别名呢? 别名相同时,就不能省略use \ns2\T1 as TT;echo '别名访问:' . TT::class;namespace ns3\sub;class Hello {}

<?php// 当前类的命名空间与当前类的文件路径对应namespace inc\lib;// 类名与当前类文件名称相同class Test1{}
<?phpnamespace inc\lib;class Test2{}
<?phpnamespace inc\lib;class Test3{}
<?php// 类的自动加载spl_autoload_register(function($class){// 文件路径$path = str_replace('\\', DIRECTORY_SEPARATOR, $class);// 文件名$file = __DIR__ .DIRECTORY_SEPARATOR .$path. '.php';require $file;});echo inc\lib\Test1::class;echo '<hr>';try {spl_autoload_register(function($class){// 文件路径$path = str_replace('\\', DIRECTORY_SEPARATOR, $class);// 文件名$file = __DIR__ .DIRECTORY_SEPARATOR .$path. '.php';// 加载异常测试,判断它是个文件,文件必须存在if (!(is_file($file) && file_exists($file)))throw new \Exception('不是文件或文件不存在');require $file;});} catch (Exception $e) {die($e->getMessage());}use inc\lib\Test1;use inc\lib\Test2;use inc\lib\Test3;echo Test1::class,'<br>';echo Test2::class,'<br>';echo Test3::class,'<br>';
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号