魔术方法是php面向对象特有的功能,并且有时候能实现意想不到的效果,包括前面提到的构造函数、析构函数、还有__clone函数,另外再简单的介绍几个:

1、__toSring和__invoke

 class Moshu{
public function __tostring(){
return "This is the Class MagicTest.<br />";
}
public function __invoke($x){
echo "__invoke called with parameter " . $x . "<br />";
}
} $obj = new Moshu();
echo $obj;
$obj(5);

根据代码可以简单地看出,第11行说明当对象被当做字符串输出时,会自动调用__toString方法,第12行说明当对象被当做方法调用时,会自动调用__invoke方法,参数要保持一致

2、__call和__callStatic方法重载

 class Moshu{
public function __call($name, $arguments){
echo "Calling " . $name . " with parameters: " . implode(', ', $arguments) . "<br />";
} public static function __callStatic($name, $arguments){
echo "Static calling " . $name . " with parameters: " . implode(', ', $arguments) . "<br />";
}
} $obj = new Moshu();
$obj->runTest("para1", "para2");
MagicTest::runTest("para3","para4");

第12行调用一个不存在的公共方法时,__call魔术方法会被自动调用,当访问一个不存在的静态方法时,__callStatic方法会被自动调用,这个应用在开发中很常见,就好比所有不存在的方法都正常出现一样,这叫做方法重载

3、__get、__set、__isset、__unset属性重载

 class Moshu{
public function __get($name){
return "Getting the property " . $name;
}
public function __set($name, $value){
echo "Setting the property " . $name . " to value ". $value. "<br />";
} public function __isset($name){
echo "__isset invoked<br />";
return false;
} public function __unset($name){
echo "unsetting property " . $name;
}
} $obj = new Moshu();
echo $obj->name . "<br />";
$obj->name = "Name Value";
echo '$obj->name is set? '. isset($obj->name) . "<br />";
echo '$obj->name is empty?' . empty($obj->name) . "<br />";
unset($obj->name);

由代码可以看出,当读取不存在或不可访问的属性name时,__get()方法会被自动调用;当给不存在或不可访问的属性赋值时,__set()方法会自动调用;当对不可访问或不存在属性用isset或empty时,会自动调用__isset()方法,通过返回值可以看出,isset和empty返回值正好相反;当对不可访问或者不存在的属性使用unset销毁时,__unset()方法会被自动调用

以上就是php中常见的魔术方法了

php中常用魔术方法的举例的更多相关文章

  1. php中的常用魔术方法总结

    以下是对php中的常用魔术方法进行了详细的总结介绍,需要的朋友可以过来参考下 常用的魔术方法有:__Tostring () __Call() __autoLoad() __ clone() __GET ...

  2. [Python3 填坑] 014 类的常用魔术方法举例

    目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 __init__() 2.2 __new__() 2.3 __call__() 2.4 __str__() 2.5 __repr__() ...

  3. python常用魔术方法概览

    构造和初始化 __init__(self, args) 构造函数 __new__(cls) 传入的是类实例 __del__(self) 析构函数,调用 del cls 时会被调用 属性访问控制 __g ...

  4. org.apache.commons.lang.StringUtils中常用的方法

    org.apache.commons.lang.StringUtils中常用的方法,这里主要列举String中没有,且比较有用的方法: 1. 检查字符串是否为空: static boolean isB ...

  5. String对象中常用的方法

    String对象中常用的方法   1.charCodeAt方法返回一个整数,代表指定位置字符的Unicode编码.strObj.charCodeAt(index)说明:index将被处理字符的从零开始 ...

  6. PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toStr

    PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep ...

  7. 项目中常用js方法整理common.js

    抽空把项目中常用js方法整理成了common.js,都是网上搜集而来的,大家一起分享吧. var h = {}; h.get = function (url, data, ok, error) { $ ...

  8. PHP中的面向对象OOP中的魔术方法

    一.什么是魔术方法: PHP为我们提供了一系列用__开头的函数,这些函数无需自己手动调用,会在合适的时机自动调用,这类函数称为魔术函数.例如: function __construct(){} 在ne ...

  9. 巧用PHP中__get()魔术方法

    PHP中的魔术方法有很多,这些魔术方法可以让PHP脚本在某些特定的情况下自动调用.比如 __construct() 每次实例化一个类都会先调用该方法进行初始化.这里我们讲一下__get() 魔术方法的 ...

随机推荐

  1. myeclipse6.0 序列号生成器源码

    import java.io.*; public class Test{ private static final String LL = "Decompiling this copyrig ...

  2. oracle基本语句

    ALTER TABLE SCOTT.TEST RENAME TO TEST1--修改表名 ALTER TABLE SCOTT.TEST RENAME COLUMN NAME TO NAME1 --修改 ...

  3. js阻止表单重复提交

    //校验表单的数据 function newFatherModuleVerify() { var moduelName = $('#fatherModule_moduelName').val(); a ...

  4. 抓包利器Fiddler

    1).Fiddler安装 a.下载地址: http://fiddler2.com/get-fiddler b.安装:省略(下一步...下一步即可) 2).Fiddler配置 a.允许远程计算机连接Fi ...

  5. linux 下用户管理

    linux 下用户管理 一.用户的分类 1.超级用户:root UID=0 2.系统用户:不需要登录系统,对应用程序服务,主要维护系统的正常运行:UID = 1 ~ 499(RHEL7 = 1 ~ 9 ...

  6. linux(Debian)下安装与MySql的安装、卸载、配置及使用

    参考资料:http://www.cnblogs.com/xusir/p/3334217.html 以下是简要记录. 一.安装 安装:apt-get install mysql-server mysql ...

  7. JS 显示时间与倒计时练习

    显示时间与倒计时 HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  8. CentOS 设置网络(修改IP&修改网关&修改DNS)--update.14.08.15

    自己电脑上装的虚拟机用桥接方式连接物理机,虚拟机重启后ip会发生变化,非常阻碍Xshell的连接和hosts指定的dns. 通过修改IP为static模式,保持IP不变. ============== ...

  9. SQL2005之SA提权总结

    首先,看看xp_cmdshell存在不,不存在的话先恢复下. Exec sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_confi ...

  10. JavaScript 技巧总结

    日期1. 日期时间戳 +new Date() = new Date().getTime() 数组1. 类数组转数组 var arr = Array.prototype.slice.call(argum ...