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目录管理函数小结
Sep 10 PHP
php empty,isset,is_null判断比较(差异与异同)
Oct 19 PHP
解析thinkphp中的导入文件标签
Jun 20 PHP
PHP Class&amp;Object -- PHP 自排序二叉树的深入解析
Jun 25 PHP
ThinkPHP整合百度Ueditor图文教程
Oct 21 PHP
php实现兼容2038年后Unix时间戳转换函数
Mar 18 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
Jul 01 PHP
PHP防止图片盗用(盗链)的方法小结
Nov 11 PHP
Zend Framework处理Json数据方法详解
Dec 09 PHP
php基于自定义函数记录log日志方法
Jul 21 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
基于laravel缓冲cache的用法详解
Oct 23 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的FTP学习(二)
2006/10/09 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
2015/12/22 PHP
php微信公众号开发之快递查询
2018/10/20 PHP
[原创]用javascript实现检测指定目录是否存在的方法
2008/01/12 Javascript
写自已的js类库需要的核心代码
2012/07/16 Javascript
javascript的变量、传值、传址、参数之间关系
2015/07/26 Javascript
jQuery实现Email邮箱地址自动补全功能代码
2015/11/03 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
js面向对象编程总结
2017/02/16 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
Vue监听数组变化源码解析
2017/03/09 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
angularjs之$timeout指令详解
2017/06/13 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
2017/09/06 Javascript
js前端导出Excel的方法
2017/11/01 Javascript
Angular2整合其他插件的方法
2018/01/20 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
2018/05/18 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
JavaScript数组及常见操作方法小结
2019/11/13 Javascript
Vue程序化的事件监听器(实例方案详解)
2020/01/07 Javascript
python实现壁纸批量下载代码实例
2018/01/25 Python
django1.11.1 models 数据库同步方法
2018/05/30 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
python实现的Iou与Giou代码
2020/01/18 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
JAVA及PYTHON质数计算代码对比解析
2020/06/10 Python
详解Python GUI编程之PyQt5入门到实战
2020/12/10 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
大学生个人简历中的自我评价
2013/12/27 职场文书
自动化职业生涯规划书范文
2014/01/03 职场文书
小学教师师德感言
2014/02/10 职场文书
2016年党员公开承诺书范文
2016/03/24 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书
Android 界面一键变灰 深色主题工具类
2022/04/28 Java/Android