当前位置:网站首页>php中魔术方法详解
php中魔术方法详解
2022-08-02 03:26:00 【陌潇】
〝 古人学问遗无力,少壮功夫老始成 〞
php中魔术方法详解,在php中有一类方法,很奇怪常,那就是只要满足一定条件,就会自己执行,那就是php中的魔术方法,码字不易,出精品更难,没有特别幸运,那么请先特别努力,别因为懒惰而失败,还矫情地将原因归于自己倒霉。你必须特别努力,才能显得毫不费力。如果这篇文章能给你带来一点帮助,希望给飞兔小哥哥一键三连,表示支持,谢谢各位小伙伴们。
目录
一、__construct构造方法
二、 __destruct析构方法
三、 __clone克隆方法
四、__call非静态调用方法
五、__callStatic静态调用方法
六、__debugInfo打印方法
七、__get获取成员属性方法
八、__isset方法
九、__set方法
十、__invoke方法
十一、__sleep方法
十二、__toString方法
十三、__unset方法
十四、__wakeup方法
一、__construct构造方法
当类被实例化的时候就会调用
简单来说,就是new一个类的时候,这个方法就会自动执行
<?php
class autofelix
{
public function __construct()
{
echo '我是类autofelix';
}
}
new autofelix();
//即可输出:我是类autofelix
二、 __destruct析构方法
当类被销毁时候自动触发
可以使用unset方法触发该方法
<?php
class autofelix
{
public function __destruct()
{
echo '我准备销毁你了';
}
}
$a = new autofelix();
unset($a);
//即可输出:我准备销毁你了
三、 __clone克隆方法
当类被克隆时自动会自动调用
<?php
class autofelix
{
public function __clone()
{
echo '我克隆了你';
}
}
$a = new autofelix();
clone $a;
//即可输出:我克隆了你
四、__call非静态调用方法
当要调用的方法不存在或者权限不足时候会自动调用
比如我在类的外部调用类内部的private修饰的方法
<?php
class autofelix
{
private function say()
{
echo 'hello, 我是autofelix';
}
public function __call($name, $arguments)
{
echo '你无权调用' . $name . '方法';
die;
}
}
$a = new autofelix();
$a->say(); //按理说应该报错
//即可输出:你无权调用say方法
五、__callStatic静态调用方法
当要调用的静态方法不存在或者权限不足时候会自动调用
比如我在类的外部调用类内部的private修饰的静态方法
<?php
class autofelix
{
private static function say()
{
echo 'hello, 我是autofelix';
}
public function __callStatic($name, $arguments)
{
echo '你无权调用' . $name . '方法';
die;
}
}
$a = new autofelix();
$a::say(); //按理说应该报错
//即可输出:你无权调用say方法
六、__debugInfo打印方法
该方法会在var_dump()类对象时候被调用
如果没有定义该方法,var_dump()将会打印出所有的类属性
<?php
class autofelix
{
public function __debugInfo()
{
echo '你看不到我任何信息的~';
}
}
var_dump(new autofelix());
//即可输出:你看不到我任何信息的~
七、__get获取成员属性方法
通过它可以在对象外部获取私有成员属性
<?php
class autofelix
{
private $name = 'autofelix';
public function __get($name)
{
if(in_array($name, ['name', 'age'])) {
echo $this->name;
} else {
echo '不是什么东西都能访问的~';
}
}
}
$a = new autofelix();
$a->name;
//即可输出:autofelix
八、__isset方法
当对不可访问的属性调用isset()或则会empty()时候会被自动调用
<?php
class autofelix
{
private $name = 'autofelix';
public function __isset($name)
{
if(in_array($name, ['name', 'age'])) {
echo $this->name;
} else {
echo '不是什么东西都能访问的~';
}
}
}
$a = new autofelix();
isset($a->name);
//结果: autofelix
九、__set方法
给一个未定义的属性赋值时候会被触发
<?php
class autofelix
{
public function __set($name, $value)
{
echo '你想给' . $name . '赋值' . $value;
}
}
$a = new autofelix();
$a->name = 'autofelix';
//结果: 你想给name赋值autofelix;
十、__invoke方法
对象本身不能直接当函数用
如果对象被当作函数调用就会触发该方法
<?php
class autofelix
{
public function __invoke()
{
echo '你还想调用我?';
}
}
$a = new autofelix();
//对象直接当函数调用
$a();
//结果: 你还想调用我?
十一、__sleep方法
当在类的外部调用serialize()时会自动被调用
<?php
class autofelix
{
public function __sleep()
{
echo '弄啥嘞~';
}
}
$a = new autofelix();
serialize($a);
//结果: 弄啥嘞~
十二、__toString方法
当一个类被当作字符串处理时应该返回什么
这里必须返回一个string类型不然会报致命错误
<?php
class autofelix
{
public function __toString()
{
return '我是你得不到的对象...';
}
}
$a = new autofelix();
echo $a;
//结果: 我是你得不到的对象...
十三、__unset方法
当对不可访问的属性调用unset()时会被自动调用
<?php
class autofelix
{
private $name = 'autofelix';
public function __unset($name)
{
echo '想删我? 你也配?';
}
}
$a = new autofelix();
unset($a->name);
//结果: 想删我? 你也配?
十四、__wakeup方法
当执行unserialize()方法时会被自动调用
<?php
class autofelix
{
public function __wakeup()
{
echo '又想弄啥嘞~';
}
}
$a = new autofelix();
unserialize($a);
//结果: 又想弄啥嘞~
边栏推荐
- SQL注入(6)
- 借贷记账法下的账户结构、借贷记账法的记账规则、借贷记账法下的账户对应关系与会计分录
- Google Hacking
- 英语每日打卡
- Eric target penetration test complete tutorial
- 会计凭证概述、原始凭证、原始凭证的种类、原始凭证的基本内容、原始凭证的填制要求、原始凭证的审核
- Anaconda报错:An unexpected error has occurred. Conda has prepared the above report 解决办法
- 成本会计的概念、产品成本核算的要求、产品成本核算的对象与成本项目、产品成本的归集和分配(可能考判断)、产品成本计算方法 (三种:产品的品种(品种法),批次(分批法),步骤(分步法))
- Warzone: 3 (Exogen) vulnhub walkthrough
- hackmyvm: juggling walkthrough
猜你喜欢

uniapp | Compilation error after updating with npm update

(3) 字符串

CSRF(跨站请求伪造)

动力:2 vulnhub预排
![[sebastian/diff] A historical change extension library for comparing two texts](/img/c7/ea79db7a5003523ece7cf4f39e4987.png)
[sebastian/diff] A historical change extension library for comparing two texts

DNS详解

The CTF introduction of PHP file contains

hackmyvm-hopper预排

The roll call system and array elements find maximum and minimum values for sorting of objects

DarkHole: 2 vulnhub walkthrough
随机推荐
hackmyvm: again walkthrough
(3) 字符串
Alibaba Cloud MySQL 5.7 installation and some major problems (total)
Phonebook
同态加密:CKKS原理之旋转(Rotation)
(不重点考)试算平衡的分类
How to calculate the distance between two points on the earth (with formula derivation)
The roll call system and array elements find maximum and minimum values for sorting of objects
WeChat applet development video loading: [Rendering layer network layer error] Failed to load media
成本会计的概念、产品成本核算的要求、产品成本核算的对象与成本项目、产品成本的归集和分配(可能考判断)、产品成本计算方法 (三种:产品的品种(品种法),批次(分批法),步骤(分步法))
v-bind usage: class dynamic binding object array style style and function method
CTF-网鼎杯往届题目
文件包含漏洞
PHP反序列化漏洞
Solve the problem that the 5+APP real machine test cannot access the background (same local area network)
How to determine the direction based on two coordinate points on the map
After Alibaba Cloud sets up domain name resolution redirection, I cannot use Chrome to access it
(2) 顺序结构、对象的布尔值、选择结构、循环结构、列表、字典、元组、集合
laravel-admin 线上访问项目,一直重定向到登录页面
加密数字货币前传:从大卫·乔姆到中本聪