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
Dec 13 PHP
php,ajax实现分页
Mar 27 PHP
PHP6 mysql连接方式说明
Feb 09 PHP
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
Apr 07 PHP
php foreach正序倒序输出示例代码
Jul 01 PHP
php根据一个给定范围和步进生成数组的方法
Jun 19 PHP
分享五个PHP7性能优化提升技巧
Dec 07 PHP
php实现登录tplink WR882N获取IP和重启的方法
Jul 20 PHP
php.ini中date.timezone设置详解
Nov 20 PHP
php 实现Hash表功能实例详解
Nov 29 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
May 05 PHP
Laravel网站打开速度优化的方法汇总
Jul 16 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过滤表单提交的html等危险代码
2014/11/03 PHP
smarty模板引擎基础知识入门
2015/03/30 PHP
PHP Reflection API详解
2015/05/12 PHP
PHP中echo与print区别点整理
2021/03/09 PHP
基于JQuery的密码强度验证代码
2010/03/01 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
使用Jquery获取带特殊符号的ID 标签的方法
2014/04/30 Javascript
每日十条JavaScript经验技巧(一)
2016/06/23 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
2016/07/28 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
基于JavaScript实现图片剪切效果
2017/03/07 Javascript
深入理解Vuex 模块化(module)
2017/09/26 Javascript
原生js实现拖拽功能基本思路详解
2018/04/18 Javascript
jsonp实现百度下拉框功能的方法分析
2019/05/10 Javascript
微信小程序实现多选框全选与取消全选功能示例
2019/05/14 Javascript
使用Vue.observable()进行状态管理的实例代码详解
2019/05/26 Javascript
vue中nextTick用法实例
2019/09/11 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
用Python编写简单的微博爬虫
2016/03/04 Python
在python中使用正则表达式查找可嵌套字符串组
2017/10/24 Python
Python寻找两个有序数组的中位数实例详解
2018/12/05 Python
Python3对称加密算法AES、DES3实例详解
2018/12/06 Python
django drf框架自带的路由及最简化的视图
2019/09/10 Python
重写django的model下的objects模型管理器方式
2020/05/15 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
美国批发零售网站:GearXS
2016/07/26 全球购物
Servlet如何得到客户端机器的信息
2014/10/17 面试题
教师岗位聘任书范文
2014/03/29 职场文书
毕业生应聘求职信
2014/07/10 职场文书
七一讲话心得体会
2014/09/05 职场文书
英文商务邀请函范文
2015/01/31 职场文书
爱国主义教育主题班会
2015/08/13 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书
2016年学校禁毒宣传活动工作总结
2016/04/05 职场文书
深入探讨opencv图像矫正算法实战
2021/05/21 Python
SONY600GR,国产收音机厂商永远的痛
2022/04/05 无线电