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可以定义属性
  • 相关阅读:
    idea maven install java: 程序包不存在
    Window10取消文件默认打开方式
    @ModelAttribute与@RequestBody的区别
    python小知识
    CentOS下yum方式安装FFmpeg
    推荐一款可以直接下载浏览器sources资源的Chrome插件
    如何在python中使用Elasticsearch
    python logging模块“另一个程序正在使用此文件,进程无法访问。”问题解决办法
    Python的伪造数据生成器:Faker
    docker修改系统时间总结
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/14127933.html
Copyright © 2011-2022 走看看