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 相关文章推荐
Smarty安装配置方法
Apr 10 PHP
最新的php 文件上传模型,支持多文件上传
Aug 13 PHP
php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
May 15 PHP
php定义数组和使用示例(php数组的定义方法)
Mar 29 PHP
PHP程序员的技术成长规划
Mar 25 PHP
Yii2使用swiftmailer发送邮件的方法
May 03 PHP
PHP生成及获取JSON文件的方法
Aug 23 PHP
利用php生成验证码
Feb 23 PHP
PHP实现的文件上传类与用法详解
Jul 05 PHP
YII分模块加载路由的实现方法
Oct 01 PHP
PDO::lastInsertId讲解
Jan 29 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
Mar 09 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批量采集下载美女图片的实现代码
2013/06/03 PHP
带你了解PHP7 性能翻倍的关键
2015/11/19 PHP
php 数组随机取值的简单实例
2016/05/23 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
php 根据自增id创建唯一编号类
2017/04/06 PHP
[原创]保存的js无法执行的解决办法
2007/02/25 Javascript
在html页面中包含共享页面的方法
2008/10/24 Javascript
jQuery 树形结构的选择器
2010/02/15 Javascript
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
2013/12/27 Javascript
javascript如何操作HTML下拉列表标签
2015/08/20 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
浅谈JavaScript的函数及作用域
2016/12/30 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
浅析JavaScript中的平稳退化(graceful degradation)
2017/07/24 Javascript
基于vue.js快速搭建图书管理平台
2017/10/29 Javascript
微信小程序语音同步智能识别的实现案例代码解析
2020/05/29 Javascript
[38:32]完美世界DOTA2联赛循环赛 Forest vs DM 第二场 11.06
2020/11/06 DOTA
Python timeit模块的使用实践
2020/01/13 Python
Django 实现对已存在的model进行更改
2020/03/28 Python
python文件操作seek()偏移量,读取指正到指定位置操作
2020/07/05 Python
浅谈python出错时traceback的解读
2020/07/15 Python
深入理解css属性的选择对动画性能的影响
2016/04/20 HTML / CSS
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
了解AppleTalk协议吗
2014/04/01 面试题
上课睡觉检讨书
2014/01/28 职场文书
保险公司早会主持词
2014/03/22 职场文书
房产协议书范本2014
2014/09/30 职场文书
2015年百日安全活动总结
2015/03/26 职场文书
新郎新娘致辞
2015/07/31 职场文书
清洁工工作总结
2015/08/11 职场文书
python四种出行路线规划的实现
2021/06/23 Python
Redis RDB技术底层原理详解
2021/09/04 Redis
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技
阿里云服务器部署RabbitMQ集群的详细教程
2022/06/01 Servers