php笔记(10)——面向对象之魔术方法
来源:互联网 发布:小猪收银系统源码 编辑:程序博客网 时间:2024/06/03 20:18
- __tostring
- __invoke
- __call
- __staticcall
- __get
- __set
- __isset
- __unset
- __clone
__tostring()
当对象被当作字符串输出时,调用该方法。
class People{ public function __tostring(){ return 'this is a people'; }}$p1 = new People();echo $p1;
__invoke
当对象被当作方法调用时,会调用该方法
class People{ public function __invoke($x){ echo 'invoke..'.$x; }}$p1 = new People();$p1(1);
__call()
当访问对象的方法不存在时,将会调用该方法
class People{ public function __call($name,$arguments){ echo 'call..'.$name.' with args '.implode(',',$arguments); }}$p1 = new People();$p1->hehe('2','1');
__staticcall()
当访问类静态方法不存在时,调用该方法
class People{ public static function __callStatic($name,$arguments){ echo 'calling static function '.$name.' with args '.implode(',',$arguments); }}People::hehe('1','2');
__get()
当访问的属性不能正常访问时(没有该属性或者是private属性),调用该方法
class People{ public function __get($name){ return "try to get property:".$name; }}$obj = new People();echo $obj->name;
__set()
当要赋值的属性不能正常访问时(没有该属性或者是private属性),调用该方法
class People{ public function __set($name,$value){ echo "try to set property:".$name ." with value:".$value; }}$obj = new People(); $obj->name = '11';
__isset()
当不可访问属性调用isset()和empty()
方法时,将会调用。
class People{ public function __isset($name){ echo "calling isset ".$name ; return true;//return false; }}$obj = new People();isset($obj->name);
class People{ public function __isset($name){ echo "calling isset ".$name ; return true;//return false; }}$obj = new People();empty($obj->name);
__unset()
当不可访问属性调用unset()
方法时,将会调用。
class People{ public function __unset($name){ echo "calling unset ".$name ; return true;//return false; }}$obj = new People();unset($obj->name);
__clone()
如下的代码,如果直接使用赋值符号,那么两个变量p1和p2其实是指向同一个对象,如果修改p2,那么p1也会被修改
class People{ public $name;}$p1 = new People();$p1->name = "name1";$p2 = $p1;$p2->name = "name2";echo "p1's name:".$p1->name.'<br>';echo "p2's name:".$p2->name;
我们可以使用clone关键字,复制一个对象(内存中重新开辟一个空间)
class People{ public $name;}$p1 = new People();$p1->name = "name1";$p2 = clone $p1;$p2->name = "name2";echo "p1's name:".$p1->name.'<br>';echo "p2's name:".$p2->name;
在使用clone的时候,就会调用__clone()
方法
class People{ public $name; function __clone(){ echo "calling clone<br>"; //可以在此处修改克隆后的值 $this->name = '111'; }}$p1 = new People();$p1->name = "name1";$p2 = clone $p1;echo "p1's name:".$p1->name.'<br>';echo "p2's name:".$p2->name;
0 0
- php笔记(10)——面向对象之魔术方法
- php 面向对象之—— 魔术方法
- php面向对象笔记5 魔术方法
- PHP之面向对象的魔术方法
- php面向对象魔术方法
- PHP面向对象-----魔术方法
- php面向对象之-魔术方法__set__get__unset__isset的使用-126
- php面向对象之-魔术方法在框架中的应用(自动生成sql语句)-127
- PHP面向对象中的魔术方法
- PHP面向对象魔术方法复习
- Php面向对象魔术方法总结
- PHP中的面向对象魔术方法大全
- PHP面向对象:封装--魔术方法__set()
- PHP面向对象:封装--魔术方法__get()
- PHP面向对象:魔术方法__toString()
- PHP面向对象:魔术方法__call()
- PHP面向对象中魔术方法使用
- 面向对象--魔术方法
- Java 理论与实践: 正确使用 Volatile 变量
- 趣写算法系列之--匈牙利算法
- Hive和Hbase
- String、StringBuffer、StringBuilder
- Lua的内存监测和回收
- php笔记(10)——面向对象之魔术方法
- 《剑指offer》面试题4 替换空格为%20
- 01背包问题
- float元素详解
- hadoop框架详细分析
- 回溯法——permutation-sequence 返回第k个排序序列
- spring MVC配置详解
- 最小生成树大汇总
- android心得