批改状态:合格
老师批语:命名空间的知识,非常重要
写一个分级的命名空间, 并实现类的自动加载
新建一个文件Test1.php代码如下:
<?php
namespace _001\one;
class Test1{
public static function demo(){
return __METHOD__;
}
}点击 "运行实例" 按钮查看在线实例
新建一个文件Test2.php代码如下:
<?php
namespace __001\one\two;
class Test2{
public static function demo(){
return __METHOD__;
}
}点击 "运行实例" 按钮查看在线实例
新建一个文件index.php代码如下:
<?php
namespace _001;
//类的自动加载
spl_autoload_register(function ($className){
$path = str_replace('\\', DIRECTORY_SEPARATOR, $className);
$path = __DIR__ .'/'. $path . '.php';
if (file_exists($path)) include $path;
});
// use
// 默认从全局开始, 可以省略掉: \
// as 给当前的空间名称起一个别名
// 防止当前空间名称命名冲突
// 如果省略as ,那么当前类的别名就是当前类的去掉空间名称的类名
use __001\one\Test1 as T1;
use __001\one\two\Test2 as T2;
echo T1::class;
echo '<br>';
echo T2::class;
echo '<br>';点击 "运行实例" 按钮查看在线实例
运行后效果如下图所示:

2. 写一个trait类, 理解它的功能与使用场景
<?php
namespace _001;
trait Name{
public function getName($name){
return $name;
}
}
trait Sex{
public function getSex($sex){
return $sex;
}
}
class Person{
use Name;
use Sex;
public function __construct($name,$sex){
$this->name=$name;
$this->sex=$sex;
}
public function getPerson(){
return '姓名:'.$this->getName($this->name).'<br>性别:'. $this->getSex($this->sex);
}
}
$obj=new Person('张三','男');
echo $obj->getPerson();点击 "运行实例" 按钮查看在线实例
运行后效果如下图所示:

注意:trait优先级大于父级,不可以实例化。
可以用来写一个方法集,而不改变父级的代码。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号