摘要://trait代码复用,trait工作在父类和子类之间,位于父类与子类之间,优先级高于父类(trait不可乱用,否则会影响项目的完整性)低于子类 //trait和class相似, trait仅仅旨在用细粒度和一致的方式来组合功能。trait无法通过自身来实例化。trait与class之间的继承不需要使用extends继承。 trait Func1 { &
//trait代码复用,trait工作在父类和子类之间,位于父类与子类之间,优先级高于父类(trait不可乱用,否则会影响项目的完整性)低于子类
//trait和class相似, trait仅仅旨在用细粒度和一致的方式来组合功能。trait无法通过自身来实例化。trait与class之间的继承不需要使用extends继承。
trait Func1
{
public function drive()
{
return '支持屋人驾驶';
}
public function care()
{
return '请及时充电';
}
public function accident()
{
return '请拨打交警110电话';
}
}
trait Func2
{
public function fuel()
{
return '新能源汽车';
}
//事故处理
public function accident()
{
return '请不要再车内抽烟';
}
}
class Auto
{
public $brand;//品牌
public $purpose;//用途
public function __construct($brand, $purpose)
{
$this->brand = $brand;
$this->purpose = $purpose;
}
//保养
public function care()
{
return '请到店铺中保养';
}
}
class Bus extends Auto
{
//可以继承bus中的成员,也可以导入trait类中的方法
// use Func1;
// use Func2;
//命名冲突解决方案:替换;别名
use Func1,Func2{
Func1::accident insteadof Func2;//用Func1中accident的方法替换Func2中的accident方法
Func2::accident as Func2Acc;
}
// public function care()
// {
// return '我们是生产商,请到经销商店面保养';
// }
}
$bus = new Bus('比亚迪', '客运');
echo $bus->brand, '<br>';
echo $bus->purpose, '<br>';
echo $bus->drive(), '<br>';
echo $bus->fuel(), '<br>';
echo $bus->care(), '<br>';
echo $bus->accident(), '<br>';//访问Func1中的accident方法
echo $bus->Func2Acc(), '<br>';//访问Func2中的accident方法
//命名空间。在当前命名空间下可以创建和系统重名的函数。
//在命名空间访问一个函数时,优先在当前命名空间中查找,没有找到,则在全局命名空间中查找。如果当前命名空间有与全局命名空间重名的函数,要是想直接调用全局命名空间中的函数,则需要用全局访问符(即在函数开始用反斜杠)。
//在声明命名空间时,不能将带花括号和不带花括号的命名空间放在一个文件中声明。
//声明one空间
namespace one
{
echo __NAMESPACE__,'<br>';
class AA{
public static function index(){
echo __METHOD__,'<br>';
}
}
function var_dump($name){
echo 'hello ', $name ,'<br>';
}
$name = 'world';
var_dump($name);//与系统函数同名时,优先调用当前命名空间中的函数 == \one\var_dump($name);
\var_dump($name);//直接调用全局空间中的函数
echo '<br>';
}
//声明two空间
namespace two
{
echo __NAMESPACE__,'<br>';
class BB{
public static function index(){
echo __METHOD__;
}
}
\DD::index();//在子空间中显示调用全局空间中的函数
}
//声明全局空间
namespace
{
echo __NAMESPACE__,'<br>';
one\AA::index();echo '<br>';
two\BB::index();echo '<br>';
class DD{
public static function index(){
echo __METHOD__;
}
}
}
//全局空间下可以访问子空间,但是在子空间中不可以直接调用全局空间,需要显示调用
/**
* 导入命名空间:
* 非限定名称:适用当前空间成员,类似于当前路径
* 限定名称:与当前空间关联的空间,类似于相对路径
* 完全限定名称:导入外部空间,类似于绝对路径
* 导入空间并不意味着自动加载,需要手动加载或自定义自动加载规则
**/
use app\user\model\User;
//导入有空间名称的函数库,必须是php5.6+
use function app\user\func_lib\delete as del;
批改老师:韦小宝批改时间:2018-11-26 13:40:32
老师总结:写的很不错!代码完整!总结的也很到位哦!继续加油吧!