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 相关文章推荐
支持php4、php5的mysql数据库操作类
Jan 10 PHP
php连接mysql数据库代码
Mar 10 PHP
在PHP中使用反射技术的架构插件使用说明
May 18 PHP
php常用字符串处理函数实例分析
Nov 22 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
Dec 18 PHP
PHP如何将log信息写入服务器中的log文件
Jul 29 PHP
thinkPHP基于ajax实现的菜单与分页示例
Jul 12 PHP
PHP获取input输入框中的值去数据库比较显示出来
Nov 16 PHP
php创建图像具体步骤
Mar 13 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
Oct 09 PHP
php字符串函数 str类常见用法示例
May 15 PHP
PHP实现计算器小功能
Aug 28 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-fpm 参数的深入理解
2013/06/03 PHP
php常用的安全过滤函数集锦
2014/10/09 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
2016/01/14 PHP
PHP list() 将数组中的值赋给变量的简单实例
2016/06/13 PHP
简单PHP会话(session)说明介绍
2016/08/21 PHP
Alliance vs AM BO3 第一场2.13
2021/03/10 DOTA
javascript OFFICE控件测试代码
2009/12/08 Javascript
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
jQuery 获取URL的GET参数值的小例子
2013/04/18 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
js变量、作用域及内存详解
2014/09/23 Javascript
跟我学习javascript解决异步编程异常方案
2015/11/23 Javascript
jQuery实现查找链接文字替换属性的方法
2016/06/27 Javascript
详解JS中的快速排序与冒泡
2017/01/10 Javascript
jQuery自定义元素右键点击事件(实现案例)
2017/04/28 jQuery
jQuery实现的简单在线计算器功能
2017/05/11 jQuery
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
jquery css实现流程进度条
2020/03/26 jQuery
vue动态设置路由权限的主要思路
2021/01/13 Vue.js
[08:54]DOTA2-DPC中国联赛 正赛 Aster vs LBZS 选手采访
2021/03/11 DOTA
PyTorch上实现卷积神经网络CNN的方法
2018/04/28 Python
基于Python实现用户管理系统
2019/02/26 Python
python验证身份证信息实例代码
2019/05/06 Python
解决python中导入win32com.client出错的问题
2019/07/26 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
2019/08/14 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
Python3操作读写CSV文件使用包过程解析
2020/04/10 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
2021/03/02 Python
鞋类设计与工艺专业销售求职信
2013/11/01 职场文书
房屋租赁授权委托书范本
2014/09/20 职场文书
公司感谢信范文
2015/01/22 职场文书
新员工入职感言范文!
2019/07/04 职场文书
小学五年级(说明文3篇)
2019/08/13 职场文书