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

深入理解PHP原理之Opcodes

超级有用的9个PHP代码片段

PHP关于重写与重载

PHP面向对象之选择工厂和更新工厂