php中的重载指的是当某些不允许操作发生时
思考:php东西复合数据类型,如果直接echo 输出东西会报错的,这样的报错会给用户体验欠好,有没有步伐能够解决这类问题呢?
引入:虽然上述问题呈现是因为措施员的误操纵,但是简直有可能呈现这样的问题,尤其是我们的措施是给外部挪用时,所以,面向东西关于很多东西可能呈现
了一种容错机制,这种机制叫做重载。
php重载【了解】界说 重载overload,本意指一个类中可以呈现多个同名要领,相互之间的参数个数和类型不一样,但是php中不撑持同名要领,而且也不区分数据类型(所类型语言)
所以php不撑持传统重载,,php中的重载指的是当某些不允许操纵产生时,会自动挪用的一种内部机制,即自动挪用相关的魔术要领。
1.魔术要领:指系统为类中预先设计好的,只需要开发者实际的要领,魔术要领以双下划线__开头,东西在某些特定情况下会自动挪用的要领,结构要领,析构要领和克隆要领就是魔术要领
<?php class posoen{ public $name; } $s=new man(); //实例化后东西自动挪用 触发时机:东西实例化
2.php重载是指某些容错措置惩罚惩罚(也可以理解:为了某些特殊情况下而自动挪用),在访谒没有权限或者不存在的属性或者要领的时候,会自动触发的魔术要领
要领重载
属性重载
3.属性重载:当php东西访谒不存在的或这没有权限访谒的属性时候会自动挪用的要领
__get($key):读属性的时候触发
__set($key):写属性的时候触发
__inset($key):外部挪用isset()函数或者empty()函数时自动触发
__unset($key):外部挪用isset()布局删除东西属性时自动触发
__tostring():东西被看成普通变量输出或者连接时自动挪用
<?php class posen{ private $name=‘duwei‘; //重载要领 //读取重载 function __get($key){ echo $key.__METHOD__.‘<br>‘; } //写重载 function __set($key,$values){ echo $key.‘:‘.$values.__METHOD__.‘<br>‘; } //判定重载 function __isset($key){ echo $key.__METHOD__.‘判定了我‘."<br>"; } //删除重载 function __unset($key){ echo $key.__METHOD__.‘你想删除我‘.‘<br>‘; } //普通输出 function __tostring(){ echo ‘-----‘.__METHOD__.‘还是我‘.‘<br>‘; return ‘不成能‘; } } $s=new posen(); //实例化后东西自动挪用 触发时机:东西实例化 //访谒 echo $s->name; //类中私有属性,外部访谒 提示name posen__get() //设置 $s->name="tianguo"; //给私有属性赋值,原来就会报错 所以触发了__set() //判定 isset($s->name); //判定私有属性也会报错 出发了__isset();.......... //删除 unset($s->name); //输出 echo $s; //输出东西,报错 触发__tostring()
4.属性重载的目的:一方面为了不让措施运行堕落,另一方面可以在类内部由我们本身控制内容的访谒。
<?php class posen{ private $name=‘duwei‘; //私有不允许外部访谒 private $age=‘80‘; //重载要领 //读取重载 function __get($key){ //界说一个允许访谒列表:假设有很多私有属性 $list=array(‘age‘); //判断是否在列表内,在就允许访谒,不在就返回null或者false if(in_array($key,$list)){ return $this->$key; //可变属性;$key是外部访谒的方针,最终为$this->age; }else{ return ‘抱愧,这个属性不能访谒‘; } } //写重载 function __set($key,$value){ if($value<50){ $this->$key=$value; }else{ echo ‘这个数值我不能接受‘; } } } $s=new posen(); echo $s->name; //输出抱愧,这个属性不能访谒 $s->age=33; //设置告成 $s->age=100; //设置掉败 这个值我不能接受 echo $s->age; //输出33
注意:属性的重载,就相当于c#中的属性get和set,非常相似。
可变参数,就相当于__construct()函数一样,当你实例化一个类的时候,挪用的是结构函数__construct(),如果结构函数中有参数,必需在
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30035.html
- 上一篇:是共同使用一块内存池子
- 下一篇:至少不用解析http报文头部一些字段