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 获取全局变量的代码
Apr 21 PHP
五款常用mysql slow log分析工具的比较分析
May 22 PHP
php 文件缓存函数
Oct 08 PHP
PHP Error与Logging函数的深入理解
Jun 03 PHP
浅析十款PHP开发框架的对比
Jul 05 PHP
PHP实现把数字ID转字母ID
Aug 12 PHP
php-fpm配置详解
Feb 12 PHP
微信公众平台天气预报功能开发
Jul 06 PHP
Yii扩展组件编写方法实例分析
Jun 29 PHP
PHP引用返回用法示例
May 28 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
Aug 15 PHP
laravel使用redis队列实例讲解
Mar 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
玛琪朵 Macchiato
2021/03/03 咖啡文化
一个基于PDO的数据库操作类(新) 一个PDO事务实例
2011/07/03 PHP
PHP解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
phpcms手机内容页面添加上一篇和下一篇
2015/06/05 PHP
教你在PHPStorm中配置Xdebug
2015/07/27 PHP
CI配置多数据库访问的方法
2016/03/28 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
2016/12/24 PHP
Laravel自动生成UUID,从建表到使用详解
2019/10/24 PHP
JavaScript快速检测浏览器对CSS3特性的支持情况
2012/09/26 Javascript
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
2014/08/03 NodeJs
轻松创建nodejs服务器(8):非阻塞是如何实现的
2014/12/18 NodeJs
javascript排序函数实现数字排序
2015/06/26 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
2016/04/29 Javascript
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
pace.js和NProgress.js两个加载进度插件的一点小总结
2018/01/31 Javascript
JS中数组与对象的遍历方法实例小结
2018/08/14 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
python3设计模式之简单工厂模式
2017/10/17 Python
python如何修改装饰器中参数
2018/03/20 Python
详解Python3中的迭代器和生成器及其区别
2018/10/09 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
python 猴子补丁(monkey patch)
2019/06/26 Python
python 实现将Numpy数组保存为图像
2020/01/09 Python
python能在浏览器能运行吗
2020/06/17 Python
Python requests接口测试实现代码
2020/09/08 Python
Django项目创建及管理实现流程详解
2020/10/13 Python
行政助理工作职责范本
2014/03/04 职场文书
应用外语系自荐信
2014/06/26 职场文书
人与自然的观后感
2015/06/18 职场文书
2015迎新晚会活动总结
2015/07/16 职场文书
laravel ajax curd 搜索登录判断功能的实现
2021/04/17 PHP
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL
SQL Server中的游标介绍
2022/05/20 SQL Server