Web安全
基础漏洞
01前端基础【HTML】
02前端基础【CSS】
03后端基础【PHP速通】
04后端基础【PHP面向对象】
05MySQL基础操作
06前后端联动【代码练习】
07SQL注入【1】
07SQL 注入【2】
08SQL注入 Labs
08SQL注入速查表
09XSS
09跨站脚本攻击【XSS】
09XSS Labs
10跨站请求伪造【CSRF】
11服务器端请求伪造【SSRF】
12XML 外部实体注入【XXE】
13代码执行漏洞
14命令执行漏洞
15文件包含漏洞
16文件上传漏洞
17反序列化漏洞
18业务逻辑漏洞
19未授权访问漏洞集合
20跨源资源共享【CORS】
21SSTI模板注入
22并发漏洞
23点击劫持【Clickjacking 】
24请求走私
25路径遍历
26访问控制
27身份验证漏洞
28WebSocket
29Web缓存中毒
30HTTP 主机头攻击
31信息泄露漏洞
32原型污染
33NoSQL注入
API 安全
01web应用程序
02HTTP协议
03API概述
04分类类型
05交换格式
06身份验证
07常见API漏洞
08crAPI靶场
09JWT
10OAuth 2.0身份验证
11GraphQL【1】
11GraphQL【2】
12DVGA靶场
13服务器端参数污染
14API文档
15API Labs
16OAuth Labs
17GraphQL API Labs
18JWT Labs
小程序
小程序抓包
数据库
MySQL
Oracle
MongoDB
Redis
PostgreSQL
SQL server
中间件
Nginx
Apache HTTP Server
IIS
Tomcat
框架
ThinkPHP
Spring
Spring Boot
Django
访问控制
-
+
首页
03后端基础【PHP速通】
# 一、概述 PHP(Hypertext Preprocessor)是一种广泛使用的开源服务器端脚本语言,尤其适用于Web开发。 它最初由Rasmus Lerdorf于1994年创建,旨在简化网页开发过程。PHP可以嵌入到HTML中,并与多种数据库集成,最常用的是MySQL。其灵活性、易学性和强大的社区支持使得PHP成为开发动态网页和Web应用程序的首选语言之一。 PHP代码在服务器上执行,生成的HTML发送到客户端,从而实现网页的动态交互。它广泛应用于各种Web开发项目,包括内容管理系统、电子商务平台和社交媒体网站。 ## PHP 是什么? * PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种通用开源脚本语言。 * PHP 脚本在服务器上执行。 * PHP 可免费下载使用。 ## PHP 文件是什么? * PHP 文件可包含文本、HTML、JavaScript代码和 PHP 代码 * PHP 代码在服务器上执行,结果以纯 HTML 形式返回给浏览器 * PHP 文件的默认文件扩展名是 ".php" ## PHP 能做什么? * PHP 可以生成动态页面内容 * PHP 可以创建、打开、读取、写入、关闭服务器上的文件 * PHP 可以收集表单数据 * PHP 可以发送和接收 cookies * PHP 可以添加、删除、修改您的数据库中的数据 * PHP 可以限制用户访问您的网站上的一些页面 * PHP 可以加密数据 ## 为什么使用 PHP? * PHP 可在不同的平台上运行(Windows、Linux、Unix、Mac OS X 等) * PHP 与目前几乎所有的正在被使用的服务器相兼容(Apache、IIS 等) * PHP 提供了广泛的数据库支持 * PHP 易于学习,并可高效地运行在服务器端 ## PHP语法 PHP 脚本可以放在文档中的任何位置。 PHP 脚本以 结束: PHP 文件的默认文件扩展名是 ".php"。 PHP 文件通常包含 HTML 标签和一些 PHP 脚本代码。 ```html <!DOCTYPE html> <html> <body> <h1>My first PHP page</h1> <?php echo "Hello World!"; ?> </body> </html> ``` PHP 中的每个代码行都必须以分号结束。分号是一种分隔符,用于把指令集区分开来。 通过 PHP,有两种在浏览器输出文本的基础指令:**echo** 和 **print**。 ## PHP 注释 * // 单行注释 * /\* \*/ 多行注释 ```html <!DOCTYPE html> <html> <body> <?php // 这是 PHP 单行注释 /* 这是 PHP 多行 注释 */ ?> </body> </html> ``` ## 变量 变量是用于存储信息的"容器" ```php <?php $x=5; $y=6; $z=$x+$y; echo $z; ?> ``` **PHP 变量规则** * 变量以 \$ 符号开始,后面跟着变量的名称 * 变量名必须以字母或者下划线字符开始 * 变量名只能包含字母、数字以及下划线(A-z、0-9 和 \_ ) * 变量名不能包含空格 * 变量名是区分大小写的(\$y 和 \$Y 是两个不同的变量) ## 创建PHP变量 PHP 没有声明变量的命令。 变量在您第一次赋值给它的时候被创建 ```php <?php $txt="Hello world!"; $x=5; $y=10.5; ?> ``` 在上面的语句执行中,变量 **txt** 将保存值 \*\*Hello world!\*\*,且变量 **x** 将保存值 **5**。 **注释:** 当您赋一个文本值给变量时,请在文本值两侧加上引号。 ## PHP 是一门弱类型语言 PHP 会根据变量的值,自动把变量转换为正确的数据类型。 在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类型和名称。 # 二、echo 和 print 语句 echo 和 print 区别: * echo - 可以输出一个或多个字符串 * print - 只允许输出一个字符串,返回值总为 1 **提示:** echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。 echo 是一个语言结构,使用的时候可以不用加括号,也可以加上括号: echo 或 echo()。 **显示字符串** ```php <?php echo "<h2>PHP 很有趣!</h2>"; echo "Hello world!<br>"; echo "我要学 PHP!<br>"; echo "这是一个", "字符串,", "使用了", "多个", "参数。"; ?> ``` **显示变量** ```php <?php $txt1="学习 PHP"; $txt2="xbxaq.com"; $cars=array("Volvo","BMW","Toyota"); echo $txt1; echo "<br>"; echo "在 $txt2 学习 PHP "; echo "<br>"; echo "我车的品牌是 {$cars[0]}"; ?> ``` print 同样是一个语言结构,可以使用括号,也可以不使用括号: print 或 print()。 **显示字符串** ```php <?php print "<h2>PHP 很有趣!</h2>"; print "Hello world!<br>"; print "我要学习 PHP!"; ?> ``` **显示变量** ```php <?php $txt1="学习 PHP"; $txt2="xbxaq.COM"; $cars=array("Volvo","BMW","Toyota"); print $txt1; print "<br>"; print "在 $txt2 学习 PHP "; print "<br>"; print "我车的品牌是 {$cars[0]}"; ?> ``` # 三、数据类型 PHP 变量存储不同的类型的数据,不同的数据类型可以做不一样的事情。 PHP 支持以下几种数据类型: * String(字符串) * Integer(整型) * Float(浮点型) * Boolean(布尔型) * Array(数组) * Object(对象) * (空值) * Resource(资源类型) ## 字符串 一个字符串是一串字符的序列,就像 "Hello world!"。 你可以将任何文本放在单引号和双引号中 ```php <?php $x = "Hello world!"; echo $x; echo "<br>"; $x = 'Hello world!'; echo $x; ?> ``` ## 整型 整数是一个没有小数的数字。 整数规则: * 整数必须至少有一个数字 (0-9) * 整数不能包含逗号或空格 * 整数是没有小数点的 * 整数可以是正数或负数 * 整型可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)。 PHP var\_dump()函数用于输出一个或多个表达式的类型和值,它通常用于调试目的,因为它可以快速显示变量的详细信息。 ```php <?php $x = 5985; var_dump($x); echo "<br>"; $x = -345; // 负数 var_dump($x); echo "<br>"; $x = 0x8C; // 十六进制数 var_dump($x); echo "<br>"; $x = 047; // 八进制数 var_dump($x); ?> ``` ## 浮点型 浮点数是带小数部分的数字,或是指数形式 ```php <?php $x = 10.365; var_dump($x); echo "<br>"; $x = 2.4e3; var_dump($x); echo "<br>"; $x = 8E-5; var_dump($x); ?> ``` ## 布尔型 布尔型可以是 TRUE 或 FALSE。 布尔型通常用于条件判断。 ## 数组 数组可以在一个变量中存储多个值 ```php <?php $cars=array("Volvo","BMW","Toyota"); var_dump($cars); ?> ``` ## 对象 对象数据类型也可以用于存储数据。 在 PHP 中,对象必须声明。 首先,你必须使用class关键字声明类对象。类是可以包含属性和方法的结构。 然后我们在类中定义数据类型,然后在实例化的类中使用数据类型 ```php <?php class Car { var $color; function __construct($color="green") { $this->color = $color; } function what_color() { return $this->color; } } ?> ``` ## 值 值表示变量没有值。 是数据类型为 的值。 值指明一个变量是否为空值。 同样可用于数据空值和 值的区别。 可以通过设置变量值为 来清空变量数据 ```php <?php $x="Hello world!"; $x=null; var_dump($x); ?> ``` ## 类型比较 虽然 PHP 是弱类型语言,但也需要明白变量类型及它们的意义,因为我们经常需要对 PHP 变量进行比较,包含松散和严格比较。 * 松散比较:使用两个等号 **==** 比较,只比较值,不比较类型。 * 严格比较:用三个等号 **===** 比较,除了比较值,也比较类型。 例如,"42" 是一个字符串而 42 是一个整数。**FALSE** 是一个布尔值而 **"FALSE"** 是一个字符串。 ```php <?php if(42 == "42") { echo '1、值相等'; } echo PHP_EOL; // 换行符 if(42 === "42") { echo '2、类型相等'; } else { echo '3、类型不相等'; } ?> ``` ## PHP中 比较 0、false、 ```php <?php echo '0 == false: '; var_dump(0 == false); echo '0 === false: '; var_dump(0 === false); echo "<hr />"; echo '0 == null: '; var_dump(0 == null); echo '0 === null: '; var_dump(0 === null); echo "<hr />"; echo 'false == null: '; var_dump(false == null); echo 'false === null: '; var_dump(false === null); echo "<hr />"; echo '"0" == false: '; var_dump("0" == false); echo '"0" === false: '; var_dump("0" === false); echo "<hr />"; echo '"0" == null: '; var_dump("0" == null); echo '"0" === null: '; var_dump("0" === null); echo "<hr />"; echo '"" == false: '; var_dump("" == false); echo '"" === false: '; var_dump("" === false); echo "<hr />"; echo '"" == null: '; var_dump("" == null); echo '"" === null: '; var_dump("" === null); ``` # 四、常量 常量值被定义后,在脚本的其他任何地方都不能被改变 常量是一个简单值的标识符。该值在脚本中不能改变。 一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 \$ 修饰符)。 **注意:** 常量在整个脚本中都可以使用。 设置常量,使用 define() 函数,函数语法如下 ```bash bool define ( string $name , mixed $value [, bool $case_insensitive = false ] ) ``` 该函数有三个参数: * **name:** 必选参数,常量名称,即标志符。 * **value:** 必选参数,常量的值。 * **case_insensitive** :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。 创建一个 **区分大小写的常量**, 常量值为 "欢迎访问 xbxaq.com" ```php <?php // 区分大小写的常量名 define("GREETING", "欢迎访问 xbxaq.com"); echo GREETING; // 输出 echo '<br>'; echo greeting; // 输出 "greeting",但是有警告信息,表示该常量未定义 ?> ``` # 五、运算符 PHP 中,赋值运算符 **=** 用于给变量赋值。 在 PHP 中,算术运算符 **+** 用于把值加在一起。 ## 算术运算符 ```php <?php $x=10; $y=6; echo ($x + $y); // 输出16 echo '<br>'; // 换行 echo ($x - $y); // 输出4 echo '<br>'; // 换行 echo ($x * $y); // 输出60 echo '<br>'; // 换行 echo ($x / $y); // 输出1.6666666666667 echo '<br>'; // 换行 echo ($x % $y); // 输出4 echo '<br>'; // 换行 echo -$x; ?> ``` ## 赋值运算符 ```php <?php $x=10; echo $x; // 输出10 echo "<hr />"; $y=20; $y += 100; echo $y; // 输出120 echo "<hr />"; $z=50; $z -= 25; echo $z; // 输出25 echo "<hr />"; $i=5; $i *= 6; echo $i; // 输出30 echo "<hr />"; $j=10; $j /= 5; echo $j; // 输出2 echo "<hr />"; $k=15; $k %= 4; echo $k; // 输出3 ?> ``` ## 递增/递减运算符 ```php <?php $x=10; echo ++$x; // 输出11 echo "<hr />"; $y=10; echo $y++; // 输出10 echo "<hr />"; $z=5; echo --$z; // 输出4 echo "<hr />"; $i=5; echo $i--; // 输出5 ?> ``` ## 比较运算符 ```php <?php $x=100; $y="100"; var_dump($x == $y); echo "<br>"; var_dump($x === $y); echo "<br>"; var_dump($x != $y); echo "<br>"; var_dump($x !== $y); echo "<br>"; $a=50; $b=90; var_dump($a > $b); echo "<br>"; var_dump($a < $b); ?> ``` ## 三元运算符 语法格式: ```bash (expr1) ? (expr2) : (expr3) ``` 对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。 ## 条件语句 您编写代码时,您常常需要为不同的判断执行不同的动作。您可以在代码中使用条件语句来完成此任务。 在 PHP 中,提供了下列条件语句: * **if 语句** - 在条件成立时执行代码 * **if...else 语句** - 在条件成立时执行一块代码,条件不成立时执行另一块代码 * **if...elseif....else 语句** - 在若干条件之一成立时执行一个代码块 * **switch 语句** - 在若干条件之一成立时执行一个代码块 if 语句用于**仅当指定条件成立时执行代码** 语法: ```bash if (条件) { 条件成立时要执行的代码; } ``` ```php <?php $t=date("H"); if ($t<"20") { echo "Have a good day!"; } ?> ``` ## if...else 语句 **在条件成立时执行一块代码,条件不成立时执行另一块代码**,请使用 if....else 语句。 语法: ```bash if (条件) { 条件成立时执行的代码; } else { 条件不成立时执行的代码; } ``` ```php <?php $t=date("H"); if ($t<"20") { echo "Have a good day!"; } else { echo "Have a good night!"; } ?> ``` ## if...elseif....else 语句 **在若干条件之一成立时执行一个代码块**,请使用 if....elseif...else 语句。. 语法: ```bash if (条件) { if 条件成立时执行的代码; } elseif (条件) { elseif 条件成立时执行的代码; } else { 条件不成立时执行的代码; } ``` ```php <?php $t=date("H"); if ($t<"10") { echo "Have a good morning!"; } elseif ($t<"20") { echo "Have a good day!"; } else { echo "Have a good night!"; } ?> ``` # 六、witch 语句 switch 语句用于根据多个不同条件执行不同动作。 如果您希望**有选择地执行若干代码块之一**,请使用 switch 语句。 ```php <?php $favcolor="red"; switch ($favcolor) { case "red": echo "你喜欢的颜色是红色!"; break; case "blue": echo "你喜欢的颜色是蓝色!"; break; case "green": echo "你喜欢的颜色是绿色!"; break; default: echo "你喜欢的颜色不是 红, 蓝, 或绿色!"; } ?> ``` # 七、数组 数组能够在单个变量中存储多个值 数组可以在单个变量中存储多个值,并且您可以根据键访问其中的值。 ```php <?php $cars=array("Volvo","BMW","Toyota"); echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . "."; ?> ``` ## 创建数组 在 PHP 中,array() 函数用于创建数组: ```bash array(); ``` 在 PHP 中,有三种类型的数组: * **数值数组** - 带有数字 ID 键的数组 * **关联数组** - 带有指定的键的数组,每个键关联一个值 * **多维数组** - 包含一个或多个数组的数组 ## 数值数组 这里有两种创建数值数组的方法: 自动分配 ID 键(ID 键总是从 0 开始): ```bash $cars=array("Volvo","BMW","Toyota"); ``` ```php <?php $cars=array("Volvo","BMW","Toyota"); echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . "."; ?> ``` ## 获取数组的长度 - count() 函数 count() 函数用于返回数组的长度(元素的数量) ```php <?php $cars=array("Volvo","BMW","Toyota"); echo count($cars); ?> ``` ## 遍历数值数组 遍历并打印数值数组中的所有值,您可以使用 for 循环 ```php <?php $cars=array("Volvo","BMW","Toyota"); $arrlength=count($cars); for($x=0;$x<$arrlength;$x++) { echo $cars[$x]; echo "<br>"; } ?> ``` ## 关联数组 关联数组是使用您分配给数组的指定的键的数组。 这里有两种创建关联数组的方法 ```bash $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); or $age['Peter']="35"; $age['Ben']="37"; $age['Joe']="43"; ``` ```php <?php $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); echo "Peter is " . $age['Peter'] . " years old."; ?> ``` ## 遍历关联数组 遍历并打印关联数组中的所有值,您可以使用 foreach 循环 ```php <?php $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); foreach($age as $x=>$x_value) { echo "Key=" . $x . ", Value=" . $x_value; echo "<br>"; } ?> ``` # 八、循环 循环执行代码块指定的次数,或者当指定的条件为真时循环执行代码块。 在 PHP 中,提供了下列循环语句: * **while** - 只要指定的条件成立,则循环执行代码块 * **do...while** - 首先执行一次代码块,然后在指定的条件成立时重复这个循环 * **for** - 循环执行代码块指定的次数 * **foreach** - 根据数组中每个元素来循环代码块 # 九、while循环 while 循环将重复执行代码块,直到指定的条件不成立。 语法 ```· while (条件) { 要执行的代码; } ``` 实例首先设置变量 *i* 的值为 1 (\$i\=1;)。 然后,只要 *i* 小于或者等于 5,while 循环将继续运行。循环每运行一次,*i* 就会递增 1: ```html <html> <body> <?php $i=1; while($i<=5) { echo "The number is " . $i . "<br>"; $i++; } ?> </body> </html> ``` ## do...while 语句 do...while 语句会至少执行一次代码,然后检查条件,只要条件成立,就会重复进行循环。 语法 ```bash do { 要执行的代码; } while (条件); ``` 实例首先设置变量 *i* 的值为 1 (\$i\=1;)。 然后,开始 do...while 循环。循环将变量 *i* 的值递增 1,然后输出。先检查条件(*i* 小于或者等于 5),只要 *i* 小于或者等于 5,循环将继续运行 ```php <html> <body> <?php $i=1; do { $i++; echo "The number is " . $i . "<br>"; } while ($i<=5); ?> </body> </html> ``` # 十、For 循环 for 循环用于您预先知道脚本需要运行的次数的情况。 语法 ```bash for (初始值; 条件; 增量) { 要执行的代码; } ``` 参数: * **初始值**:主要是初始化一个变量值,用于设置一个计数器(但可以是任何在循环的开始被执行一次的代码)。 * **条件**:循环执行的限制条件。如果为 TRUE,则循环继续。如果为 FALSE,则循环结束。 * **增量**:主要用于递增计数器(但可以是任何在循环的结束被执行的代码)。 **注释:** 上面的**初始值**和**增量**参数可为空,或者有多个表达式(用逗号分隔)。 实例 下面的实例定义一个初始值为 i\=1 的循环。只要变量 **i** 小于或者等于 5,循环将继续运行。循环每运行一次,变量 **i** 就会递增 1 ```php <?php for ($i=1; $i<=5; $i++) { echo "数字为 " . $i; } ?> ``` ## foreach 循环 foreach 循环用于遍历数组。 语法 ```bash foreach ($array as $value) { 要执行代码; } ``` 每进行一次循环,当前数组元素的值就会被赋值给 \$value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值。 ```bash foreach ($array as $key => $value) { 要执行代码; } ``` 每一次循环,当前数组元素的键与值就都会被赋值给 \$key 和 \$value 变量(数字指针会逐一地移动),在进行下一次循环时,你将看到数组中的下一个键与值。 ```php <?php $x=array("Google","Runoob","Taobao"); foreach ($x as $value) { echo $value; echo "<br>"; } ?> ``` ```php <?php $x=array(1=>"Google", 2=>"Runoob", 3=>"Taobao"); foreach ($x as $key => $value) { echo "key 为 " . $key . ",对应的 value 为 ". $value . PHP_EOL; } ?> ``` # 十一、函数 ## 创建 PHP 函数 函数是通过调用函数来执行的。 ```php <?php function functionName() { // 要执行的代码 } ?> ``` 函数准则: * 函数的名称应该提示出它的功能 * 函数名称以字母或下划线开头(不能以数字开头) ```php <?php function writeName() { echo "Kai Jim Refsnes"; } echo "My name is "; writeName(); ?> ``` ## 函数 - 添加参数 为了给函数添加更多的功能,我们可以添加参数,参数类似变量。 参数就在函数名称后面的一个括号内指定。 ```php <?php function writeName($fname) { echo $fname . " Refsnes.<br>"; } echo "My name is "; writeName("Kai Jim"); echo "My sister's name is "; writeName("Hege"); echo "My brother's name is "; writeName("Stale"); ?> ``` ```php <?php function writeName($fname,$punctuation) { echo $fname . " Refsnes" . $punctuation . "<br>"; } echo "My name is "; writeName("Kai Jim","."); echo "My sister's name is "; writeName("Hege","!"); echo "My brother's name is "; writeName("Ståle","?"); ?> ``` ## 函数 - 返回值 如需让函数返回一个值,请使用 return 语句 ```php <?php function add($x,$y) { $total=$x+$y; return $total; } echo "1 + 16 = " . add(1,16); ?> ``` # 十二、超局变量 超全局变量是在全部作用域中始终可用的内置变量。在函数或方法中无需执行global \$variable;就可以访问它们。 这些超全局变量如下: * \$GLOBALS:包含了全部变量的全局组合数组。变量的名字就是数组的键。 * \$\_SERVER:包含了诸如头信息(header)、 路径(path), 以及脚本位置(script locations)等信息的数组。这个数组中的项目由Web服务器创建。 * \$\_GET:通过URL参数传递给当前脚本的变量的数组。 * \$\_POST:当HTTP POST请求的Content-Type是application/x-www-form-urlencoded或multipart/form-data时,会将变量以关联数组形式传入当前脚本。 * \$\_REQUEST:默认情况下包含了\$\_GET、\$\_POST和\$\_COOKIE的数组。 * \$\_COOKIE:通过HTTP Cookies方式传递给当前脚本的变量的数组。 * \$\_SESSION:当前脚本可用SESSION变量的数组。 * \$\_FILES:通过HTTP POST方式上传到当前脚本的项目的数组。 * \$\_ENV:通过环境方式传递给当前脚本的变量的数组。 # 十三、魔术常量 魔术常量是PHP向它运行的任何脚本提供的大量的预定义常量。魔术常量其实不是常量,可以理解为特殊的常量,以下介绍的5个魔术常量随位置而改变。 * \_\_LINE\_\_:表示文件中的当前行号,不区分大小写; * \_\_FILE\_\_:表示文件完整的路径和命名,不区分大小写; * \_\_FUNCTION\_\_:表示函数名称,区分大小写; * \_\_CLASS\_\_:表示类的名称,区分大小写; * \_\_METHOD\_\_:表示类的方法的名称,区分大小写; * ...... # 十四、魔术方法 魔术方法都是以两个下划线开头 * \_\_construct():构造方法,当一个对象实例化时自动调用; * \_\_destruct():析构方法,当对象被销毁之前系统自动调用。用于释放对象所占用的额外的资源,而不是对象本身。有三种销毁对象的方法,具体如下: (1)脚本执行完毕之后,自动销毁 (2)改变对象变量的值,自动销毁 (3)使用 unset函数销毁对象 * \_\_clone():克隆一个对象时自动调用; * \_\_autoload ():使用尚未被定义的类时自动调用; * \_\_sleep():串行化的时候调用; * \_\_wakeup():反串行化的时候调用; * \_\_tostring():把一个对象转换成字符串来用时自动调用该方法; * \_\_invoke():把对象当一个方法来用时就会自动调用该方法; * \_\_set():为不可访问的属性设值时就会自动调用该方法; * \_\_get():获得不可访问的属性的值; * \_\_unset():删除不可访问的属性; * \_\_isset():判断不可访问的属性是否存在; * \_\_call():当调用一个不可访问的对象方法时自动调用该方法; * \_\_callstatic():调用一个不可访问的类方法;
毛林
2025年9月6日 12:34
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码