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 相关文章推荐
通过html表格发电子邮件
Oct 09 PHP
php的一个登录的类 [推荐]
Mar 16 PHP
php中防止伪造跨站请求的小招式
Sep 02 PHP
ThinkPHP快速入门实例教程之数据分页
Jul 01 PHP
Symfony的安装和配置方法
Mar 17 PHP
PHP简单判断字符串是否包含另一个字符串的方法
Mar 25 PHP
PHP多维数组元素操作类的方法
Nov 14 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
Apr 30 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
Yii2框架自定义类统一处理url操作示例
May 25 PHP
Yii Framework框架使用PHPExcel组件的方法示例
Jul 24 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
Jun 05 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判断文件是否存在、是否可读、目录是否存在的代码
2012/10/03 PHP
使用php判断服务器是否支持Gzip压缩功能
2013/09/24 PHP
php 模拟 asp.net webFrom 按钮提交事件的思路及代码
2013/12/02 PHP
MongoDB在PHP中的常用操作小结
2014/02/20 PHP
教你识别简单的免查杀PHP后门
2015/09/13 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
JS event使用方法详解
2008/04/28 Javascript
Jquery Ajax请求代码(2)
2011/01/07 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
JS把内容动态插入到DIV的实现方法
2016/07/19 Javascript
JavaScript实现简单的树形菜单效果
2017/06/23 Javascript
利用node.js实现反向代理的方法详解
2017/07/24 Javascript
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
利用百度地图API获取当前位置信息的实例
2017/11/06 Javascript
微信小程序滑动选择器的实现代码
2018/08/10 Javascript
VUE 自定义组件模板的方法详解
2019/08/30 Javascript
vue实现轮播图帧率播放
2021/01/26 Vue.js
[01:19:33]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第一场 2月2日
2021/03/11 DOTA
在Linux中通过Python脚本访问mdb数据库的方法
2015/05/06 Python
Python获取某一天是星期几的方法示例
2017/01/17 Python
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
python模块常用用法实例详解
2019/10/17 Python
使用PyTorch训练一个图像分类器实例
2020/01/08 Python
Python中sys模块功能与用法实例详解
2020/02/26 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
CSS3实现可爱的小黄人动画
2016/07/11 HTML / CSS
Belle Maison倍美丛官网:日本千趣会旗下邮购网站
2016/07/22 全球购物
八年级音乐教学反思
2014/01/09 职场文书
战友聚会邀请函
2014/01/18 职场文书
2014学习全国两会精神心得体会2000字
2014/03/11 职场文书
班风学风建设方案
2014/05/06 职场文书
倡议书范文格式
2014/05/12 职场文书
客运企业隐患排查工作方案
2014/06/06 职场文书
主要领导对照检查材料
2014/08/26 职场文书
安全月宣传标语
2014/10/07 职场文书
2019年农民幸福观调查的实践感悟
2019/12/19 职场文书