zoukankan      html  css  js  c++  java
  • 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可以定义属性
  • 相关阅读:
    awk应用
    字符串应用,expect预期交互,数组,正则表达式
    for,while循环,case分支,shell函数
    数值运算,if结构
    shell基础应用,变量的扩展应用
    rsync基本用法与配置,split分离解析
    PXE自动装机
    配置DNS服务器
    进程查看,终止
    应用技巧,vim用法,编译安装软件包
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/14127933.html
Copyright © 2011-2022 走看看