批改状态:合格
老师批语:trait只是提供了另一种选择罢了, 目前在开发过程 , 并未被足够重视,也未大量使用
第一个知识点 接口常量,接口常量和类常量类似,也是用const来定义,
第二个知识点 后期静态绑定(延迟静态绑定),绑定是在代码运行是发生的。静态继承的上下文环境中,调用子类重新的静态方法,使用关键词static代替self。
第三个知识点 命名空间的分级管理
第三个知识点 trait是为了解决子类只能继承一个父类单继承机制,在宿主类中引用trait类,使用use traitName就可以使用
作业一:写一个分级的命名空间, 并实现类的自动加载
<?php
namespace __1010;
spl_autoload_register(function($className){
$path=str_replace('\\',DIRECTORY_SEPARATOR,$className);
$path=__DIR__.DIRECTORY_SEPARATOR.$path.'.php';
include $path;
});
//类的别名使用use \__NAMESPACE__\className as Name 来定义,use默认是从根空间开始的,因此最前面的\可以省略。如果省略了Name,那么类的别名就是类名,as定义放置空间命名冲突
use config\inc\text1;
use config\inc\text2;
use config\demo1;
use config\demo2;
use inc\test1;
use inc\test2 as test2;
//测试结果,输出的都是类名下的text()方法,加载成功。
echo text1::text().'<br>';
echo text2::text().'<br>';
echo demo1::text().'<br>';
echo demo2::text().'<br>';
echo test1::text().'<br>';
echo test2::text();点击 "运行实例" 按钮查看在线实例

作业二: 写一个trait类, 理解它的功能与使用场景
//创建一个返回姓名和年龄的trait类
trait info{
public $name;
public $age;
public function info(){
return '我名字是'.$this->name.',年龄是'.$this->age;
}
}
//创建一个返回地址和电话的trait类
trait address{
public $address;
public $phone;
public function ainfo(){
return '我家住在'.$this->address.',我的电话是'.$this->phone;
}
}
//创建类来继承方法,最后返回信息
class getInfo{
use info;
use address;
public function __construct($name,$age,$phone,$address)
{
$this->phone=$phone;
$this->name=$name;
$this->age=$age;
$this->address=$address;
}
public function getInfo(){
return $this->info().$this->ainfo();
}
}
echo '<br>';
$info=new getInfo('小新',18,13598653541,'重庆市渝北区万寿山');
echo $info->getInfo();点击 "运行实例" 按钮查看在线实例
Trait类是为了解决子类只能继承一个父类而生的,这样子类就可以继承多个trait类的属性和方法,更加灵活多变。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号