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可以定义属性
  • 相关阅读:
    CF149D Coloring Brackets
    CF508D
    CF483C Diverse Permutation
    【纪念】我写过几乎最长的代码
    .net core图片上传详解
    layui插件croppers的使用
    关于日常操作中sql的性能
    leeCode 278
    leeCode刷题 1078
    leeCode刷题 lc184
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/14127933.html
Copyright © 2011-2022 走看看