trait以及命名空间的使用

原创2018-12-23 16:38:47107
摘要:<?php namespace homework; //trait不能实例化,使用use关键字引入 use one\House; trait demo1 {    public function study()    {      &
<?php
namespace homework;
//trait不能实例化,使用use关键字引入
use one\House;
trait demo1
{
   public function study()
   {
       return '在php中文网学习,收获满满~~';
   }
}
trait demo2
{
    public function study()
    {
        return '我是demo2中的study';
    }
}
class Happy
{
    //引入trait类
    use demo1,demo2{
       demo1::study insteadof demo2; //demo1中的study替换掉demo2中同名函数,
       demo2::study as study2;//给demo2中的同名函数起一个别名
    }
    public function work()
    {
        return '巩固知识很重要';
    }
}
$happy = new Happy;
echo $happy->study(),'<br>';
echo $happy->study2(),'<br>';
echo '<hr>';
//引入外部命名空间
require 'public/User.php';
use model\User;
echo User::insert();
echo '<br>';
//引入外部函数
require 'public/func_lib.php';
use function func_lib\delete as del;
echo del();

 总结:(1)trait特性技术,它实现了代码的复用,扩展了类的功能,就像一个类的小插件,不能实例化,使用use引入类中,实现了代码的复用,当工作在继承的上下文时, 是位于父类和子类之间的,其优先级高于父类,但低于子类,引用的trait类中如果重名了, 可以替换(insteadof)或者取别名(as)。(2)命名空间的使用,它类似与文件目录,在不同 的空间可以使用相同的函数名,可以在一个脚本中声明多个命名空间,这时使用大括号语法: 子空间: namespace 空间名称{//空间代码},全局空间的命名为空: namespace{},在命名 空间中,访问一个函数的时候,会优先在当前空间中查找,如果没有找到,自动到全局空间去查找;使用别名或者引用,导入外部的完全限定名称的空间,使用use关键字,默认从全 局开始,不要再加/,但是还得使用require引入类或者函数。
运行结果:

namespace.png

批改老师:天蓬老师批改时间:2018-12-23 17:00:10
老师总结:作业写的相当不错,总结的也很用心。继续努力,加油

发布手记

热门词条