• PHP面向对象之原型(trait)


    原型(trait)

    概念

    • 概念
      • trait 为了减少单继承语言的限制
      • 可以在不同层次结构内独立的类中复用类的方法集
    <?php
    trait A{
    	public function getInfo() {
    		echo 'Javascript高级程序设计<br>';
    	}
    }
    class Student {
    	use A;	
    }
    //测试
    $stu=new Student;
    $stu->getInfo();	
    ?>
    

    引入多个trait

    <?php
    trait A{
    	public function getInfo1() {
    		echo 'Javascript高级程序设计<br>';
    	}
    }
    trait B{
    	public function getInfo2() {
    		echo 'PHP和MySQL Web开发<br>';
    	}
    }
    class Student {
    	use A, B;	
    }
    //测试
    $stu=new Student;
    $stu->getInfo1();	
    $stu->getInfo2();	
    ?>
    

    trait和继承结合

    <?php
    trait A{
    	public function getInfo() {
    		echo '这是trait原型<br>';
    	}
    }
    class Person {
    	public function getInfo() {
    		echo '这是Person类<br>';
    	}
    }
    //继承类同时代码复用
    class Student extends Person {
    	use A;		//继承了getInfo,有被A中getInfo覆盖
    }
    //测试
    $stu=new Student;
    $stu->getInfo();	//这是trait原型
    ?>
    

    解决同名冲突

    方法替换

    <?php
    trait A{
    	public function getInfo() {
    		echo 'Javascript高级程序设计<br>';
    	}
    }
    trait B{
    	public function getInfo() {
    		echo 'PHP和MySQL Web开发<br>';
    	}
    }
    //使用原型
    class Student {
    	use A,B{	
    		A::getInfo insteadof B;		//将A中的getInfo替换掉B中的getInfo
    		// B::getInfo insteadof A;		//将B中的getInfo替换掉A中的getInfo
    	}
    }
    //测试
    $stu=new Student;
    $stu->getInfo();	
    ?>
    

    方法改名

    <?php
    trait A{
    	public function getInfo() {
    		echo 'Javascript高级程序设计<br>';
    	}
    }
    trait B{
    	public function getInfo() {
    		echo 'PHP和MySQL Web开发<br>';
    	}
    }
    //使用原型
    class Student {
    	use A,B{	
    		A::getInfo insteadof B;		//将A中的getInfo替换掉B中的getInfo
    		B::getInfo as show;			//将B的getInfo改名为show
    	}
    }
    //测试
    $stu= new Student;
    $stu->getInfo();
    $stu->show();	
    ?>
    

    更改权限

    <?php
    trait A{
    	private function show() {
    		echo 'Javascript高级程序设计<br>';
    	}
    }
    class Student {
    	use A{
    		//show as public;	//将show方法权限设为public;
    		show as public show2;	//将show方法设置public,并改名为show2
    	}
    }
    //测试
    $stu=new Student;
    // $stu->show();
    $stu->show2();	
    ?>
    

    其他

    • 参见数据手册
      • 多个trait可以组成一个trait
      • trait可以定义抽象成员
      • trait可以定义静态成员
      • trait可以定义属性
  • 相关阅读:
    android高级UI之Draw绘制流程、Paint渲染高级应用
    android高级UI之UI绘制流程(测量布局)
    大数据JavaWeb之MySQL基础----多表&事务&DCL
    大数据JavaWeb之MySQL基础---数据库设计、备份与还原
    大数据JavaWeb之MySQL基础---约束
    大数据JavaWeb之MySQL基础---DDL&DQL
    大数据JavaWeb之MySQL基础---MySQL安装、SQL初识
    软引用示例演示与引用队列的作用分析
    Reference的四种状态转换关系分析
    【转】document.form.action,表单分向提交
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/14127933.html
Copyright © 2020-2023  润新知