PHP中常用的魔术方法


Posted in PHP onApril 28, 2017

我们在PHP中经常用到魔术方法,像构造方法,析构方法等等魔术变量,下面总结一下一些常用的魔术变量:

__construct(),__destruct(),__clone(),__autoload(),__tostring(),__invoke(),__set(),__get(),__unset(),__isset(),__call(),__callstatic;

1,__constuct()构造函数

通常实例化完一个对象之后,都要对该对象的属性进行初始化!在实例化一个对象的时候,PHP系统会自动的调用一个名字叫作__construct()的方法,我们把这个方法叫作“构造方法”!

其中,构造方法可以没有参数!

<?php

class Stu {

 public $stu_name;
 public $stu_age;

//构造方法,实例化时自动调用
 public function __construct($name,$age){

  $this->stu_name = $name;
  $this->stu_age = $age;
 } 

}

//实例化stu对象
$stu = new Stu('孙悟空','500');

2.__destruct()析构方法

与构造方法是一对,构造方法是在一个对象“出生”的时候由系统自动调用的,而析构方法是在一个对象“消失”的时候由系统自动调用的!

析构方法的名字叫__destruct();注意里面不能有任何的参数!

<?php

//析构方法
public function __destruct(){

}
?>

注意:析构方法是在对象销毁之前调用的!  

作用:

析构方法的作用一般是用来释放该对象所占用的额外的资源,而不是销毁该对象本身!

3,__clone()克隆

触发时机:是在克隆一个对象的时候,对新对象进行初始化的工作

//克隆方法在克隆对象的时候对新对象的初始化工作
 
public function __clone(){
 
 $this->is_clone=true;
} 

思考:

克隆出来的对象还是不是Student类中的一个实例呢?

我们可以利用instanceof运算符来进行判断!

instanceof就是用来判断某个对象是否是某个类的一个实例!

需要两个操作数,前面是一个对象变量,后面是一个类名!返回一个布尔值!

var_dump($stu instanceof Stu);  

//返回bool(true)

4.__autoload()自动加载类

当调用不存在的类的时候自动调用!

<?php 

/**
* 自动加载类
* 需要什么类__autoload会自动调用需要的文件
*
*/

public function __autoload($class_name)
{
 require_once "../Model/{$class_name}.class.php";
}
 ?>

5.__tostring()

当将对象当成字符串使用的时候自动调用

6.__invoke()

当将对象当成函数使用的时候自动调用

7,__set()

当对无法访问的属性赋值时自动调用(比如:类外调用私有属性)

8.__get()

当对获取无法访问的属性值的时候自动调用

9.__unset()

当销毁无法访问的属性的时候自动调用

10.__isset()

当判断无法访问的属性是否存在的时候自动调用

11.__call()

当调用无法访问的普通方法时自动触发

<?php 
class Stu{

 public function __call(){
echo "error";
 }
}
$stu = new Stu();
//此时Stu类里没有show()方法,会触发__call()函数
$stu->show();

12.__callststic()

当无法通过静态方法访问时自动触发

<?php 
class Stu{

 public static function __callstatic(){
  echo "error";
 }
}
$stu = new Stu();
//此时Stu类里没有show()方法,会触发__call()函数
$stu::show();

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

PHP 相关文章推荐
一个简单的PHP入门源程序
Oct 09 PHP
《PHP边学边教》(01.开篇――准备工作)
Dec 13 PHP
基于pear auth实现登录验证
Feb 26 PHP
Windows中使用计划任务自动执行PHP程序实例
May 09 PHP
探寻PHP脚本不报错的原因
Jun 12 PHP
Yii框架关联查询with用法分析
Dec 02 PHP
利用PHP如何写APP接口详解
Aug 23 PHP
微信开发之获取JSAPI TICKET
Jul 07 PHP
PHP工厂模式的日常使用
Mar 20 PHP
详解提高使用Java反射的效率方法
Apr 29 PHP
laravel 创建命令行命令的图文教程
Oct 23 PHP
laravel框架语言包拓展实现方法分析
Nov 22 PHP
PHP实现Unicode编码相互转换的方法示例
Nov 17 #PHP
PHP实现文件下载【实例分享】
Apr 28 #PHP
PHP实现批量删除(封装)
Apr 28 #PHP
ThinkPHP实现生成和校验验证码功能
Apr 28 #PHP
PHP后台微信支付和支付宝支付开发
Apr 28 #PHP
ThinkPHP中create()方法自动验证表单信息
Apr 28 #PHP
ThinkPHP实现简单登陆功能
Apr 28 #PHP
You might like
PHP 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
PHP中set error handler函数用法小结
2015/11/11 PHP
微信支付开发维权通知实例
2016/07/12 PHP
PHP实现登陆表单提交CSRF及验证码
2017/01/24 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
写js时遇到的一些小问题
2010/12/06 Javascript
JavaScript中setAttribute用法介绍
2013/07/20 Javascript
12种不宜使用的Javascript语法整理
2013/11/04 Javascript
jQuery中index()的用法分析
2014/09/05 Javascript
提升jQuery的性能需要做好七件事
2016/01/11 Javascript
JS 实现随机验证码功能
2017/02/15 Javascript
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
5分钟学会Vue动画效果(小结)
2018/07/21 Javascript
JavaScript中toLocaleString()和toString()的区别实例分析
2018/08/14 Javascript
总结javascript三元运算符知识点
2018/09/28 Javascript
javascript实现计算指定范围内的质数示例
2018/12/29 Javascript
node Buffer缓存区常见操作示例
2019/05/04 Javascript
从源码角度来回答keep-alive组件的缓存原理
2021/01/18 Javascript
python3.3实现乘法表示例
2014/02/07 Python
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
2016/07/04 Python
详解Python3序列赋值、序列解包
2019/05/14 Python
python绘制直方图和密度图的实例
2019/07/08 Python
Django时区详解
2019/07/24 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
python如何求圆的面积
2020/07/01 Python
如何将json数据转换为python数据
2020/09/04 Python
python 用struct模块解决黏包问题
2020/11/07 Python
python多线程和多进程关系详解
2020/12/14 Python
js实现移动端H5页面手指滑动刻度尺功能
2017/11/16 HTML / CSS
跑步、骑行和铁人三项的高性能眼镜和服装:ROKA
2018/07/06 全球购物
数据库方面面试题
2012/04/22 面试题
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
测试工程师职业规划书
2014/02/06 职场文书
消防安全责任书
2014/04/14 职场文书
公司委托书格式
2014/08/01 职场文书
学校财务管理制度
2015/08/04 职场文书