php 多重继承的替代方案trait

来源:互联网 发布:大数据量表设计 编辑:程序博客网 时间:2024/05/17 03:40

要求php5.4 或者更高版本

trait tDebug {                                                                                                                                         
  public function dumpObject() {                                                                                                                       
  echo json_encode(get_class_vars(get_class($this))).PHP_EOL;                                                                                                                                                                                
  echo json_encode(get_object_vars($this)).PHP_EOL;                                                                                                    
}                                                                                                                                                      
};                                                                                                                                                     
                                                                                                                                                       
class A {                                                                                                                                              
                                                                                                                                                       
 use tDebug;                                                                                                                                           
 public static $_a = 1;                                                                                                                                
 private $_b = 2;                                                                                                                                      
};                                                                                                                                                     
$a = new A();                                                                                                                                          
$a->dumpObject();                                                                                                                                      


输出:

{"_b":2,"_a":1}
{"_b":2}



trait tDebug {                                                                                                                                         
  public function dumpObject() {                                                                                                                       
  echo json_encode(get_class_vars(get_class($this))).PHP_EOL;                                                                                          
  echo json_encode(get_object_vars($this)).PHP_EOL;                                                                                                    
}                                                                                                                                                      
};                                                                                                                                                     
                                                                                                                                                       
class A {                                                                                                                                              
                                                                                                                                                       
 use tDebug;                                                                                                                                           
 public static $_a = 1;                                                                                                                                
 public $_b = 2;                                                                                                                                       
};                                                                                                                                                     
$a = new A();                                                                                                                                          
$a->dumpObject();                                                                                                                                      
$a->_b = 4;                                                                                                                                            
A::$_a = 10;                                                                                                                                                                                                                                 
                                                                                                                                                       
var_dump($a);                                                                                                                                          
$a->dumpObject();

输出:

{"_b":2,"_a":1}
{"_b":2}
object(A)#1 (1) {
  ["_b"]=>
  int(4)
}
{"_b":2,"_a":10}
{"_b":4}


以上说明 get_object_vars 返回对象最新属性值(不包括类静态属性)

get_class_vars 返回类的静态属性和对象 属性(其中静态属性是最新的。。对象属性始终是第一次初始默认值)

0 0