PHP魔术方法详解

php魔术方法是一些特殊的方法,由特定的环境来进行触发。

这些魔术方法让开发者能够更好地控制对象的行为,特别是在处理不常见的操作或者需要自动化处理某些任务时非常有用。


1、_construct()构造函数:

<?php
highlight_file(__FILE__);
class User {public $username;public function __construct($username) {$this->username = $username;echo "触发了构造函数1次" ;}
}
$test = new User("benben");
$ser = serialize($test);
unserialize($ser);?> 

_construct()构造函数,在创建实例化对象时自动调用。


2、_destruct()析构函数:

class User {public function __destruct(){echo "触发了析构函数1次"."<br />" ;}
}
$test = new User("benben");
$ser = serialize($test);
unserialize($ser);

_destruct()函数,在销毁对象时自动调用。


3、sleep()函数:

class User {const SITE = 'uusama';public $username;public $nickname;private $password;public function __construct($username, $nickname, $password)    {$this->username = $username;$this->nickname = $nickname;$this->password = $password;}public function __sleep() {return array('username', 'nickname');}
}
$user = new User('a', 'b', 'c');
echo serialize($user); 

_sleep()函数在对象被序列化时调用。


4、_wakeup()函数:

<?php
highlight_file(__FILE__);
error_reporting(0);
class User {const SITE = 'uusama';public $username;public $nickname;private $password;private $order;public function __wakeup() {$this->password = $this->username;}
}
$user_ser = 'O:4:"User":2:{s:8:"username";s:1:"a";s:8:"nickname";s:1:"b";}';
var_dump(unserialize($user_ser));
?> 

_wakeup()函数在对象被反序列化时调用。


5、_toString()函数:

<?php
highlight_file(__FILE__);
error_reporting(0);
class User {var $benben = "this is test!!";public function __toString(){return '格式不对,输出不了!';}
}
$test = new User() ;
print_r($test);
echo "<br />";
echo $test;
?> 

_toString()函数在将对象转化为字符串时调用。


6、invoke()函数:

<?php
highlight_file(__FILE__);
error_reporting(0);
class User {var $benben = "this is test!!";public function __invoke(){echo  '它不是个函数!';}
}
$test = new User() ;
echo $test ->benben;
echo "<br />";
echo $test() ->benben;
?> 

_invoke()函数在将实例化对象test当作test()函数时调用。


7、_call()函数:

<?php
highlight_file(__FILE__);
error_reporting(0);
class User {public function __call($arg1,$arg2){echo "$arg1,$arg2[0]";}
}
$test = new User() ;
$test -> callxxx('a');
?> 

在对象调用一个不存在的·参数和方法时使用。


8、_callStatic()函数:

<?php
highlight_file(__FILE__);
error_reporting(0);
class User {public function __callStatic($arg1,$arg2){echo "$arg1,$arg2[0]";}
}
$test = new User() ;
$test::callxxx('a');
?> 

在以静态方式调用一个不可调用的方法时使用。


9、_set()函数:

<?php
highlight_file(__FILE__);
error_reporting(0);
class User {public $var1;public function __set($arg1 ,$arg2){echo  $arg1.','.$arg2;}
}
$test = new User() ;
$test ->var2=1;
?> 

给类中不存在的成员属性赋值时使用。


10、_get()函数:

<?php
highlight_file(__FILE__);
error_reporting(0);
class User {public $var1;public function __get($arg1){echo  $arg1;}
}
$test = new User() ;
$test ->var2;
?> 

调用类中不存在的属性时使用。


11、isset()函数:

<?php
highlight_file(__FILE__);
error_reporting(0);
class User {private $var;public function __isset($arg1 ){echo  $arg1;}
}
$test = new User() ;
isset($test->var);
?> 

在使用isset()函数检查类中不可访问的属性是否存在时使用。


12、_unset()函数:

<?php
highlight_file(__FILE__);
error_reporting(0);
class User {private $var;public function __unset($arg1 ){echo  $arg1;}
}
$test = new User() ;
unset($test->var);
?> 

在对不可访问的属性使用unset()时使用。


13、_clone()函数:

<?php
highlight_file(__FILE__);
error_reporting(0);
class User {private $var;public function __clone( ){echo  "__clone test";}
}
$test = new User() ;
$newclass = clone($test)
?> 

使用clone关键字拷贝克隆一个对象后,新对象会自动调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/751321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:SideBarContainer)

提供侧边栏可以显示和隐藏的侧边栏容器&#xff0c;通过子组件定义侧边栏和内容区&#xff0c;第一个子组件表示侧边栏&#xff0c;第二个子组件表示内容区。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起…

《LeetCode热题100》笔记题解思路技巧优化_Part_4

《LeetCode热题100》笔记&题解&思路&技巧&优化_Part_4 &#x1f60d;&#x1f60d;&#x1f60d; 相知&#x1f64c;&#x1f64c;&#x1f64c; 相识&#x1f622;&#x1f622;&#x1f622; 开始刷题二叉树&#x1f7e2;1. 二叉树的中序遍历&#x1f7e2;2.…

【计算机网络_应用层】https协议——加密和窃密的攻防

文章目录 1.https协议的介绍2. 加密和解密2.1 什么是加密2.2 常见的加密方式2.2.1 对称加密2.2.2 非对称加密 2.3 数据摘要&#xff08;数据指纹&#xff09;2.4 数字签名 3. https协议的加密和解密方案一&#xff1a;使用对称加密&#xff08;❌&#xff09;方案二&#xff1a…

Cesium模拟真实湖泊效果

1. 实现效果 2.实现方法 官方文档 Cesium的material中提供了水water的相关材质&#xff1a;传送门 详细代码&#xff1a; const getWater (data) > {// 根据几何实例创建贴地面图元waterPrimitive new Cesium.GroundPrimitive({geometryInstances: new Cesium.GeometryIn…

2024年腾讯云免费服务器申请入口,个人和企业均可申请

腾讯云免费服务器申请入口 https://curl.qcloud.com/FJhqoVDP 免费服务器可选轻量应用服务器和云服务器CVM&#xff0c;轻量配置可选2核2G3M、2核8G7M和4核8G12M&#xff0c;CVM云服务器可选2核2G3M和2核4G3M配置&#xff0c;腾讯云服务器网txyfwq.com分享2024年最新腾讯云免费…

基于单片机的DDS函数信号发生器

单片机DDS函数信号发生器设计 该设计以AT89S52为主控芯片&#xff0c;通过控制高性能DDS&#xff08;直接数字频率合成&#xff09;芯片AD9834产生不同频率的信号&#xff0c;经过6阶巴特沃兹低通滤波电路&#xff0c;连接数字电位器的运算放大电路&#xff0c;输出信号。可以…

理解接口,

关键点 接口可抽象出重要的行为标准&#xff08;用抽象方法来表示&#xff09;。 可以把实现接口的类的对象的引用赋值给接口变量&#xff0c;体 现该类根据接口里的行为标准给出具体行为。 ~接口的思想~&#xff1a;可以要求某些类&#xff08;类的父类可不同&#xff09;有…

监视和内存观察

监视和内存观察 5.监视和内存观察5.1 监视5.2 内存 5.监视和内存观察 在调试的过程中我们&#xff0c;如果要观察代码执行过程中&#xff0c;上下文环境中的变量的值&#xff0c;有哪些方法呢&#xff1f; 这些观察的前提条件一定是开始调试后观察&#xff0c;比如&#xff1…

Python小白笔记

输入 # 一行输入多个数字&#xff0c;空格隔开&#xff0c;存入列表a中 a list(map(int, input().split())) print(a) >>>21 22 34 54 67 >>>[21, 22, 34, 54, 67] 输出 数据&#xff1a; print(%d%10.3f%(x,y)) y的精度为3&#xff0c;宽度为10 %0 …

Oracle 部署及基础使用

1. Oracle 简介 Oracle Database&#xff0c;又名 Oracle RDBMS&#xff0c;简称 Oracle Oracle系统&#xff0c;即是以Oracle关系数据库为数据存储和管理作为构架基础&#xff0c;构建出的数据库管理系统。是目前最流行的客户/服务器&#xff08;client/server&#xff09;或…

SpringTask实现的任务调度与XXL-job实现的分布式任务调度【XXL-Job工作原理】

目录 任务调度 分布式任务调度 分布式任务调度存在的问题以及解决方案 使用SpringTask实现单体服务的任务调度 XXL-job分布式任务调度系统工作原理 XXL-job系统组成 XXL-job工作原理 使用XXL-job实现分布式任务调度 配置调度中心XXL-job 登录调度中心创建执行器和任务 …

测试用例要如何写

1、测试点与测试用例 测试点不等于测试用例&#xff0c;这是我们首先需要认识到的。 问题1&#xff1a;这些测试点在内容上有重复&#xff0c;存在冗余。 问题2&#xff1a;一些测试点的测试输入不明确&#xff0c;不知道测试时要测试哪些。 问题3&#xff1a;总是在搭相似…

【pynput】监控是否打开百度贴吧网页

文章目录 简介Demo 简介 有网友提过一个要求&#xff0c;用 Python 实现一个 电脑打开某网站就自动关机的功能。 想到的思路有两个&#xff1a; 【windows 平台】, 获取活动的窗口标题&#xff0c;如果标题里包含了某些网站名称, 那就使用关机命令 可以定时拉取标题, 也可以使…

滑块验证码

1.这里针对滑块验证给了一个封装的组件verifition&#xff0c;使用直接可以调用 2.组件目录 3.每个文件的内容 3.1 Api文件中只有一个index.js文件&#xff0c;用来存放获取滑块和校验滑块结果的api import request from /router/axios//获取验证图片 export function reqGe…

Docker出现容器名称重复如何解决

假如你的重复容器名称是mysql5 删除已存在的容器&#xff1a;如果你不再需要那个已经存在的名为“mysql5”的容器&#xff0c;你可以删除它。使用下面的命令&#xff1a; docker rm -f mysql5这条命令会强制删除正在运行的容器。一旦容器被删除&#xff0c;你就可以重新使用这个…

Java 面向对象(类与对象 成员方法 方法重载 可变参数 构造方法 / 构造器 this关键字 包 访问修饰符)

目录 一、类与对象1. 类与对象的定义2. 类和对象的内存分配机制 二、成员方法1. 成员方法的定义2. 方法的调用机制3. 成员方法传参机制 三、方法重载四、可变参数1. 基本概念2. 基本语法3. 应用 五、 构造方法 / 构造器1. 特点2. 使用案例3. 对象创建的流程 六、this关键字1. 运…

P6安装:安装P6提示1433端口无效

错误描述 尝试运行 Microsoft SQL Server 2005 的 Primavera P6 数据库时&#xff0c;遇到以下错误&#xff1a; SQLServerException: The TCP/IP connection to the host [name], port 1433 has failed. Error: “Connection refused: connect. Verify the connection prope…

MATLAB的多项式相加

多项式的加减在阶次相同的情况下可直接运算&#xff0c;若两个相加减的多项式阶次不同&#xff0c;则低阶多项式必须用零填补高阶项系数&#xff0c;使其与高阶多项式有相同的阶次。而且通常情况下&#xff0c;进行加减的两个多项 式的阶次不会相同&#xff0c;这时可以自定义一…

视频素材库大全免费无水印必备素材网站,整理分享抖音视频素材剪辑必备

想要做出容易上热门的抖音视频作品&#xff0c;你一定要找到合适的短视频剪辑素材&#xff0c;今天我就给你收集了视频素材库大全免费无水印必备素材网站&#xff0c;都给你提供了海量的短视频素材库大全免费无水印&#xff0c;从风景&#xff0c;美食&#xff0c;动漫&#xf…

从排序算法的艺术看C语言qsort函数的魅力:一场数据的时空穿越

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看&#xff0c;已成习惯 创作不易&#xff0c;多多支持&#xff01; 目录 一 、回调函数 二、qsort函数 1.qsort函数排序整型数据 2.qsort函数排序结构数据 一 、回调函数 何为回调函数&#xff1…