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 header()函数使用说明
Jul 10 PHP
php学习之运算符相关概念
Jun 09 PHP
php教程 插件机制在PHP中实现方案
Nov 02 PHP
php读取大文件示例分享(文件操作类)
Apr 13 PHP
将FCKeditor导入PHP+SMARTY的实现方法
Jan 15 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
Oct 27 PHP
linux下php上传文件注意事项
Jun 11 PHP
Windows2003下php5.4安装配置教程(IIS)
Jun 30 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
Jul 26 PHP
Yii2.0实现生成二维码功能实例
Oct 24 PHP
PHP实现的最大正向匹配算法示例
Dec 19 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
Jul 20 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中用header图片地址 简单隐藏图片源地址
2008/04/09 PHP
php的memcache类分享(memcache队列)
2014/03/26 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
Laravel 在views中加载公共页面的实现代码
2019/10/22 PHP
控制打印时页眉角的代码
2007/02/08 Javascript
解决使用attachEvent函数时,this指向被绑定的元素的问题的方法
2007/08/13 Javascript
ASP.NET jQuery 实例12 通过使用jQuery validation插件简单实现用户注册页面验证功能
2012/02/03 Javascript
node.js中的http.response.removeHeader方法使用说明
2014/12/14 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
JS中处理时间之setUTCMinutes()方法的使用
2015/06/12 Javascript
javascript实现自动输出文本(打字特效)
2015/08/27 Javascript
JS实现可拖曳、可关闭的弹窗效果
2015/09/26 Javascript
20分钟轻松创建自己的Bootstrap站点
2016/05/12 Javascript
AngularJS 入门教程之事件处理器详解
2016/08/19 Javascript
JS命令模式例子之菜单程序
2016/10/10 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
vue实现节点增删改功能
2019/09/26 Javascript
[01:00:35]2018DOTA2亚洲邀请赛3月30日B组 EffcetVSMineski
2018/03/31 DOTA
Python简单格式化时间的方法【strftime函数】
2016/09/18 Python
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
详解flask入门模板引擎
2018/07/18 Python
python使用循环打印所有三位数水仙花数的实例
2018/11/13 Python
python 元组的使用方法
2020/06/09 Python
iphoneX 适配客户端H5页面的方法教程
2017/12/08 HTML / CSS
HTML5实现移动端点击翻牌功能
2020/10/23 HTML / CSS
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
师范生的个人求职信范文
2014/01/04 职场文书
2015年政风行风工作总结
2015/04/21 职场文书
检讨书怎么写
2015/05/07 职场文书
班委竞选稿范文
2015/11/21 职场文书
导游词之五台山
2019/10/11 职场文书
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python
pytorch 一行代码查看网络参数总量的实现
2021/05/12 Python
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
2021/06/30 SQL Server
Grafana可视化监控系统结合SpringBoot使用
2022/04/19 Redis