批改状态:合格
老师批语:有了命名空间, 就不再担心全局成员的命名冲突了,包括引入的第三方组件,这是促进php组件化开发的基石, 可以说, 现代php就靠它实现华丽转身
<?php//清华大学namespace nQhdx//不同的命名空间可以存在相同的类,函数,接口,常量{class StuInfo{private $school = '清华大学';private $dep = '计算机科学与应用';private $classes = '04-08';public function printSDC(){echo '班名:',$this ->classes,'<br>';echo '系名:',$this ->dep,'<br>';echo '校名:',$this ->school,'<br>';echo '<hr>';}}//访问当前空间中的类和类中的方法,可省略当前空间名称:非限定名称$stu = new StuInfo();$stu ->printSDC();}//人民大学namespace nRmdx{class StuInfo{private $school = '人民大学';private $dep = '计算机科学与应用';private $classes = '04-08';public function printSDC(){echo '班名:',$this ->classes,'<br>';echo '系名:',$this ->dep,'<br>';echo '校名:',$this ->school,'<br>';echo '<hr>';}}//访问当前空间中的类和类中的方法,可省略当前空间名称:非限定名称$stu = new StuInfo();$stu ->printSDC();//访问另一个空间是的类需要使用:完全限定名称以“\”开头+空间名称+类名echo '***********访问另一个空间的类***************','<br>';$stu1 =new \nQhdx\StuInfo();$stu1 ->printSDC();}//北京大学namespace nBjdx{class School{private $school = '北京大学';public function printSchool(){//访问具有层级关系的空间时//$dep = new Computer\StuInfo();代表访问的是当前空间下的Computer空间下的StuInof类$dep = new Computer\StuInfo();$dep->printSDC();echo '校名:',$this ->school,'<br>';echo '<hr>';}}$stu = new School();$stu -> printSchool();}namespace nBjdx\Computer{class StuInfo{private $dep = '计算机科学与应用';private $classes = '04-08';public function printSDC(){echo '班名:',$this ->classes,'<br>';echo '系名:',$this ->dep,'<br>';}}}?>

<?php//清华大学namespace nQhdx//不同的命名空间可以存在相同的类,函数,接口,常量{class StuInfo{private $school = '清华大学';private $dep = '计算机科学与应用';private $classes = '04-08';public function printSDC(){echo '班名:',$this ->classes,'<br>';echo '系名:',$this ->dep,'<br>';echo '校名:',$this ->school,'<br>';echo '<hr>';}}}//人民大学namespace nRmdx{class StuInfo{private $school = '人民大学';private $dep = '计算机科学与应用';private $classes = '04-08';public function printSDC(){echo '班名:',$this ->classes,'<br>';echo '系名:',$this ->dep,'<br>';echo '校名:',$this ->school,'<br>';echo '<hr>';}}}//北京大学namespace nBjdx{class StuInfo{private $school = '北京大学';private $dep = '计算机科学与应用';private $classes = '04-08';public function printSDC(){echo '班名:',$this ->classes,'<br>';echo '系名:',$this ->dep,'<br>';echo '校名:',$this ->school,'<br>';echo '<hr>';}}}namespace nSchool{//使用空间别名,可以简化代码use \nQhdx\StuInfo as qStu;use \nRmdx\StuInfo as rStu;use \nBjdx\StuInfo as bStu;$stu1 = new qStu();//通过空间别名访问该空间中的类$stu1 ->printSDC();$stu2 = new rStu();$stu2 ->printSDC();$stu3 = new bStu();$stu3 ->printSDC();}?>

<?phprequire 'autoLoad.php';//通过autoLoad.php中的自动加载器,在使用Qhdx类的时候自动加载//如果想使用原始类中的名称则不需要加as关键字use stuInfo\school\Qhdx;//通过autoLoad.php中的自动加载器,在使用Qhdx类的时候自动加载use stuInfo\school\Rmdx;//通过autoLoad.php中的自动加载器,在使用Qhdx类的时候自动加载use stuInfo\school\Bjdx;//类已经通过自动加载器加载成功,可直接使用$stu1 = new Qhdx();$stu1 ->printSDC();$stu2 = new Rmdx();$stu2 ->printSDC();$stu3 = new Bjdx();$stu3 ->printSDC();?>
<?php//北京大学//要实现自动加载,//1.空间名称必须和类文件所在的路径一一对应//2.文件名必须与类名相同namespace stuInfo\school{class Bjdx{private $school = '北京大学';private $dep = '计算机科学与应用';private $classes = '04-08';public function printSDC(){echo '班名:',$this ->classes,'<br>';echo '系名:',$this ->dep,'<br>';echo '校名:',$this ->school,'<br>';echo '<hr>';}}}?>
<?phptry{spl_autoload_register(function($className){//DIRECTORY_SEPARATOR返回当前系统的目录分隔符//将空间中的分隔符替换成当前系统的目录分隔符$path = str_replace('\\', DIRECTORY_SEPARATOR, $className);//__DIR__返回当前文件所在路径//生成要加载的类文件名称$file = __DIR__ . DIRECTORY_SEPARATOR . $path . '.php';// 3. 加载这个文件require $file;});}catch(Exception $e){$e->getMessage();}?>
当前类文件所在的目录结构
代码运行效果
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号