php中常用魔术方法的举例
魔术方法是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中常用魔术方法的举例的更多相关文章
- php中的常用魔术方法总结
以下是对php中的常用魔术方法进行了详细的总结介绍,需要的朋友可以过来参考下 常用的魔术方法有:__Tostring () __Call() __autoLoad() __ clone() __GET ...
- [Python3 填坑] 014 类的常用魔术方法举例
目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 __init__() 2.2 __new__() 2.3 __call__() 2.4 __str__() 2.5 __repr__() ...
- python常用魔术方法概览
构造和初始化 __init__(self, args) 构造函数 __new__(cls) 传入的是类实例 __del__(self) 析构函数,调用 del cls 时会被调用 属性访问控制 __g ...
- org.apache.commons.lang.StringUtils中常用的方法
org.apache.commons.lang.StringUtils中常用的方法,这里主要列举String中没有,且比较有用的方法: 1. 检查字符串是否为空: static boolean isB ...
- String对象中常用的方法
String对象中常用的方法 1.charCodeAt方法返回一个整数,代表指定位置字符的Unicode编码.strObj.charCodeAt(index)说明:index将被处理字符的从零开始 ...
- PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toStr
PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep ...
- 项目中常用js方法整理common.js
抽空把项目中常用js方法整理成了common.js,都是网上搜集而来的,大家一起分享吧. var h = {}; h.get = function (url, data, ok, error) { $ ...
- PHP中的面向对象OOP中的魔术方法
一.什么是魔术方法: PHP为我们提供了一系列用__开头的函数,这些函数无需自己手动调用,会在合适的时机自动调用,这类函数称为魔术函数.例如: function __construct(){} 在ne ...
- 巧用PHP中__get()魔术方法
PHP中的魔术方法有很多,这些魔术方法可以让PHP脚本在某些特定的情况下自动调用.比如 __construct() 每次实例化一个类都会先调用该方法进行初始化.这里我们讲一下__get() 魔术方法的 ...
随机推荐
- codevs1225 八数码难题
题目描述 Description Yours和zero在研究A*启发式算法.拿到一道经典的A*问题,但是他们不会做,请你帮他们.问题描述 在 3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数 ...
- POJ1089 Intervals
Description There is given the series of n closed intervals [ai; bi], where i=1,2,...,n. The sum of ...
- Rootkit Hunter Sourcecode Learning
目录 . Rootkit Hunter Introduce() . Source Code Frame() . do_system_check_initialisation() . do_system ...
- org.springframework.orm.hibernate3.LocalSessionFactoryBean的疑惑解决办法
在项目中使用了SSH框架(Struts2 + Spring3+ Hibernate3),applicationContext中配置了sessionFactory <bean id="s ...
- PHP CALC
<html> <head> <title>PHP计算器</title> <meta http-equiv="Content-Type&q ...
- php导出excel
感觉技术掌握的有些太杂了,一会儿鼓捣java,一会儿鼓捣php,一边还搞着.net, maybe this just is life. 此前同事给某县政法委做的一套维稳信息平台,数据库是封装了mysq ...
- RPC 编程 使用 RPC 编程是在客户机和服务器实体之间进行可靠通信的最强大、最高效的方法之一。它为在分布式计算环境中运行的几乎所有应用程序提供基础。
RPC 编程 使用 RPC 编程是在客户机和服务器实体之间进行可靠通信的最强大.最高效的方法之一.它为在分布式计算环境中运行的几乎所有应用程序提供基础.本文介绍 RPC 客户机和服务器之间基本的事件流 ...
- 普通用户如何临时获取root权限
转自:http://634871.blog.51cto.com/624871/1325907 在实际工作中,公司不会将root用户直接给员工使用,而是通过员工自己的账号临时获得系统的root权限. 1 ...
- Windows程序----初识Windows程序
先来看一些励志名言来激励一下自己吧! 励志名言:每一发奋发奋的背后,必有加倍的赏赐 1.有无目标是成功者与平庸者的根本差别. 2.成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成. 3.当 ...
- HDU 4883 TIANKENG’s restaurant
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4883 解题报告:一家餐馆一天中有n波客人来吃饭,第 i 波 k 客人到达的时间是 s ,离开时的时间 ...