PHP之overload
Posted ChotocateCat
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP之overload相关的知识,希望对你有一定的参考价值。
1 <?php 2 /* 3 4 魔术方法的作用: 5 当访问了 私有的或者不存在的属性时候,会自动调用这些魔术方法 6 __set() , __get() , __isset() , __unset() 7 8 */ 9 class Test{ 10 private $_name; 11 private $_gender; 12 13 public function set_name($g){ 14 if (in_array($g, array(‘nan‘,‘nv‘,‘bm‘))) { 15 //做自己的业务逻辑处理 16 } 17 } 18 19 public function set_name($n){ 20 //做自己的业务逻辑 21 } 22 public function __construct($_name, $_gender){ 23 $this->$_name= $_name; 24 $this->$_gender=$_gender; 25 } 26 27 public function __set($p, $v){ 28 if(substr($p, 0,1) == "_"){ //判断重载一个 可能不存在 或者是私有的属性 29 $p= ‘_‘.$p; 30 } 31 if (true==property_exists($this, $p)) { //判断 当前类new出的对象 是否有这个形参属性 $p 32 $method_name=‘set‘.$p; 33 34 $this->$method_name($v); //$method_name 是可变的方法 因此是用 $this->$method_name 35 }else{ 36 trigger_error("您所访问的属性或者方法是私有的或者是不存在的"); 37 } 38 } 39 40 public function __get(){ 41 42 } 43 44 public function __isset($pram){ 45 //当用户调用了 isset() 方法的时候 传递进来的形参 做一系列的自己的业务逻辑处理 46 } 47 48 public function __unset(){ 49 50 } 51 } 52 53 class Factory{ 54 55 //声明静态直接由类调用该产生对象的方法 56 public static function getInstance($class_name){ 57 static $instance_list = array(); 58 59 //首先判断这个类是否已经存在类数组列表中 60 if (!isset($instance_list[$class_name])) { 61 $instance_list[$class_name] = new $class_name ; //可变类 ,new出一个可变类 62 } 63 64 return $instance_list[$class_name]; 65 } 66 } 67 68 69 $test = Factory::getInstance(‘Test‘); 70 // var_dump($test); 71 $test->_name = ‘xujin‘;
以上是关于PHP之overload的主要内容,如果未能解决你的问题,请参考以下文章
<2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvTools—— Utils(上)
<2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvGame—— Utils(终)大纲及 FPSCounter & Debug(上)大纲及 DriverInfo