php
//trait 功能与语法
//Trait 和一个类相似,但仅仅旨在用细粒度和一致的方式来组合功能。Trait 不能通过它自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用类的成员不需要继承。
trait Demo
{
protected $name="张冠李戴";
static $age;
abstract function Test();
}
class Demo1
//引入关键字 use
use Demo;
function Test()
echo Demo::$age;
$demo1=new Demo1;
//给静态变量赋值
Demo::$age=33;
$demo1->Test();
//trait:代码复用
//get_class_vars — 返回由类的默认属性组成的数组
trait tDemo
function con()
$cl=get_class_vars(__CLASS__);
printf('%s',print_r($cl,true));
%s'
class Demo
use tDemo;
protected $Title='百度';
public $Http='https://baidu.com';
public function baidu()
echo $this->Title,"--的网址是:".$this->Http,"";
$demo=new Demo;
$demo->baidu();
$demo->con();
public $arr=[1,2,3,[4,5,6,[7,8,9]]];
echo $this->Title,"--的网址是:".$this->Http,"来个数组:",printf('%s',print_r(($this->arr),true));
%s
'
$demo1->con();
$demo1->baidu();
// trait2: 在继承上下文环境中, 具有优先级, 通过优先的设置, 降低单继承的影响
//这个优先级可以替换同名函数
function test()
//输出trait的方法
echo 'son访问到了trait方法是:',__METHOD__;
class Dad
echo 'son访问到了class方法是:',__METHOD__;
class Son extends Dad
$son=new Son;
$son->test();
//trait组合实现功能扩展
//功能扩展:
trait tDemo1
function class_name()
//格式化打印类中属性
$class_name=get_class_vars(__CLASS__);
printf('%s',print_r($class_name,true));
trait tDemo2
function method_name()
//格式化打印类中方法
$method_name=get_class_methods(__CLASS__);
printf('%s',print_r($method_name,true));
//或更多trait
class Test
use tDemo1,tDemo2;//同时引入
public $name="手机";
public $price=2000;
$test=new Test;
$test->class_name();//调用函数,打印出当前类中的属性
$test->method_name();
//或者:
trait tDemo3
use tDemo1,tDemo2;
function mar()
public static function test()
abstract public function abtest();
public $address='地球';
public $type='外星人';
class Test1
use tDemo3;
public $age=3000;
public function abtest(){
$test1=new Test1;
$test1->class_name();
$test1->method_name();