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实现读取和编写XML DOM代码
Apr 07 PHP
php 传值赋值与引用赋值的区别
Dec 29 PHP
php var_export与var_dump 输出的不同
Aug 09 PHP
PHP eval函数使用介绍
Dec 08 PHP
php快递单号查询接口使用示例
May 05 PHP
访问编码后的中文URL返回404错误的解决方法
Aug 20 PHP
php简单生成随机数的方法
Jul 30 PHP
php基于session锁防止阻塞请求的方法分析
Aug 07 PHP
PHP实现链表的定义与反转功能示例
Jun 09 PHP
php获取用户真实IP和防刷机制的实例代码
Nov 28 PHP
PHP实现微信提现功能(微信商城)
Nov 21 PHP
通过代码实例解析PHP session工作原理
Dec 11 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实现添加购物车功能
2017/03/06 PHP
基于JQuery.timer插件实现一个计时器
2010/04/25 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
javascript scrollTop正解使用方法
2013/11/14 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
通过隐藏iframe实现文件下载的js方法介绍
2014/02/26 Javascript
jquery实现瀑布流效果分享
2014/03/26 Javascript
每天一篇javascript学习小结(RegExp对象)
2015/11/17 Javascript
JS简单模拟触发按钮点击功能的方法
2015/11/30 Javascript
ES5学习教程之Array对象
2017/04/01 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
基于Vue框架vux组件库实现上拉刷新功能
2017/11/28 Javascript
angular2路由之routerLinkActive指令【推荐】
2018/05/30 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
2019/01/27 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
2019/06/05 Javascript
NodeJS http模块用法示例【创建web服务器/客户端】
2019/11/05 NodeJs
OpenLayers3加载常用控件使用方法详解
2020/09/25 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
2020/11/06 Javascript
[01:37]全新的一集《真视界》——TI7总决赛
2017/09/21 DOTA
pymssql数据库操作MSSQL2005实例分析
2015/05/25 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
Python 中 -m 的典型用法、原理解析与发展演变
2019/11/11 Python
Python通过VGG16模型实现图像风格转换操作详解
2020/01/16 Python
python encrypt 实现AES加密的实例详解
2020/02/20 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
业务部主管岗位职责
2014/01/29 职场文书
餐厅经理岗位职责范本
2014/02/17 职场文书
《赠汪伦》教学反思
2014/04/12 职场文书
法学专业毕业生自荐信
2014/06/11 职场文书
2015安全保卫工作总结
2015/04/25 职场文书
浅谈Python中的正则表达式
2021/06/28 Python
一小时学会TensorFlow2之基本操作2实例代码
2021/09/04 Python
JavaScript实现栈结构详细过程
2021/12/06 Javascript