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桌面中心(四) 数据显示
Mar 11 PHP
PHP mkdir()定义和用法
Jan 14 PHP
PHP常用的文件操作函数经典收藏
Apr 02 PHP
PHP实现HTML生成PDF文件的方法
Nov 07 PHP
PHP解密Unicode及Escape加密字符串
May 17 PHP
PHP 返回13位时间戳的实现代码
May 13 PHP
PHP生成唯一ID之SnowFlake算法
Dec 17 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
Dec 23 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
Mar 14 PHP
PHP实现Session入库/存入redis的方法
May 04 PHP
php显示页码分页类的封装
Jun 08 PHP
laravel框架实现敏感词汇过滤功能示例
Feb 15 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 采集获取指定网址的内容
2010/01/05 PHP
php析构函数的简单使用说明
2015/08/24 PHP
CodeIgniter基于Email类发邮件的方法
2016/03/29 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
PHP 实现文件压缩解压操作的方法
2019/06/14 PHP
jquery 简单的进度条实现代码
2010/03/11 Javascript
javascript instanceof 内部机制探析
2010/10/15 Javascript
JavaScript学习笔记之获取当前目录的实现代码
2010/12/14 Javascript
详解JavaScript中undefined与null的区别
2014/03/29 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
2016/09/19 Javascript
vue货币过滤器的实现方法
2017/04/01 Javascript
利用javascript如何随机生成一定位数的密码
2017/09/22 Javascript
微信小程序实现图片上传放大预览删除代码
2020/06/28 Javascript
Electron 调用命令行(cmd)
2019/09/23 Javascript
原生js实现随机点名功能
2019/11/05 Javascript
es5 类与es6中class的区别小结
2020/11/09 Javascript
Vue项目打包部署到apache服务器的方法步骤
2021/02/01 Vue.js
python设置检查点简单实现代码
2014/07/01 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
Python3.5模块的定义、导入、优化操作图文详解
2019/04/27 Python
Python猴子补丁知识点总结
2020/01/05 Python
零基础小白多久能学会python
2020/06/22 Python
Python字符串查找基本操作代码案例
2020/10/27 Python
为什么UNION ALL比UNION快
2016/03/17 面试题
毕业生的自我鉴定该怎么写
2013/12/02 职场文书
师德学习感言
2014/01/31 职场文书
十佳护士获奖感言
2014/02/18 职场文书
车辆转让协议书
2014/04/15 职场文书
学校对教师的评语
2014/04/28 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
2014年教育培训工作总结
2014/12/08 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
详解Nginx启动失败的几种错误处理
2021/04/01 Servers
Python实现批量自动整理文件
2022/03/16 Python