PHP 基础/练习
练习
成绩定级
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>成绩定级脚本</title>
</head>
<body><form method="post">输入成绩:<input type="text" name="score"><input type="submit"></form><?php@$score=$_POST["score"];if($score==NULL){}else{if($score>=60){echo"congratulations";}else{echo "sorry";}}?>
</body>
</html>
验证可变变量
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>可变变量</title>
</head>
<body><?php$panshuaipeng="person";$person="NB";echo $$panshuaipeng;?>
</body>
</html>
九九乘法表
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>99 乘法表</title>
</head>
<body><?phpecho"<table border=1>";for ($i = 1; $i < 10; $i++) {echo "<tr>";for ($j = 1; $j <= $i; $j++) {echo "<td>";echo "{$j}"."*"."{$i}"."="."{$j}"*"{$i}";echo "</td>";}echo "</tr>";}echo"</table>";?>
</body>
</html>
PHP 基础
概述
-
在PHP 文件中,可以与HTML 和JavaScript 混编。
-
开始标记
<?php
表示进入PHP 模式,结束标记?>
,标识退出PHP 模式。 -
PHP 模式之外的内容会被作为字符输出到浏览器中。
-
PHP 在服务端执行,HTML 和 JS 在浏览器执行
-
HTML 或JavaScript 对于PHP 来说就是纯文本字符串
-
phpinfo
安全问题:如果是一个在线的网站能够看到phpinfo 页面,说明存在敏感信息泄露漏洞,这个漏洞需要体现在后面的渗透测试报告中。
<?php phpinfo()?>
基础语法
PHP 开始标记
<?php
PHP 结束标记
?>
指令分隔符
分号;
,代表一句PHP 代码的结束。
注释
-
单行注释
该行
//
后的内容为注释内容phpinfo(); // 该函数会显示PHP 配置信息
-
多行注释
/*
开始,*/
结束/*这是多行注释!以下语句表示PHP 配置信息 */ phpinfo();
空白字符
-
空白符包括:
空白字符 表达 空格 TAB 制表符 \t 回车换行 \r\n
换行也可以在输出的字符中输出<br>
这些空白字符在PHP 中都是无关紧要的,可以将一个语句展开成任意行,或者紧缩在一行,空格与空行的合理运用可以增强代码的清晰性与可读性,如果运用不合理反而会对阅读产生负担!
但是,不能是用空白符打断 PHP 的关键字,例如函数名,语句名,变量名,类名,方法名等等。
-
例,不打断关键字
phpinfo
依旧可执行
-
例,打断关键字
phpinfo
错误级别
- Notice、Warning 不会打断 PHP 运行
- Error 会直接导致 PHP 程序结束运行
变量
变量的声明、使用、释放
变量定义
-
形式
$ + 变量名;
-
严格区分大小写
$name; $Name; $NAME //三个变量不是同一个变量
-
字母、数字、下划线组成,不能以数字开头,不能包含其他字符(空白字符、特殊字符)
-
驼峰式命名法、下划线式命名法
$first_name; $firstName; $FirstName;
-
标识符(关键字)尽量不作为变量名
变量的赋值、使用
-
echo
输出字符串<?php $username="gjl"; echo $username;//在网页输出 gjl ?>
变量的释放
-
unset()
函数unset($变量名);
<?php $username="gjl"; unset($username); echo $username;//报错Notice: Undefined variable: username in E:\phpstudy\WWW\test.php on line 4 //未定义变量 ?>
可变变量
-
可变变量:
一个变量的名字可以动态设置和使用
也是 php 中变量覆盖漏洞的原因之一
定义:
$$
-
使用举例
<?php $username="gjl"; $gjl="GuoJialiang"; echo $$username; //输出 GuoJialiang //$($username) ?>
-
应用
<?php $username="gjl"; $gjl="GuoJialiang"; $$username="liang"; echo $gjl; //输出 liang ?>
变量类型
- 具有相同类型的数据才能相互操作
输出变量类型
-
将变量类型输出使用函数
var_dump()
<?php $name = "ZhangSan"; var_dump($name); //输出 string(8) "ZhangSan" //长度为8的字符串“ZhangSan” ?>
<?php $sex = true; var_dump($sex); $age = 24; var_dump($age); $score = 59.9; var_dump($score);//输出 bool(true) int(24) float(59.9) ?>
bool
-
true/false
进行 if 判断的时,候如果表达式不是布尔类型的值,会自动进行类型转换,将其它类型的值转换成布尔值,以下值被认为是
false
,其他大部分的值则被认为是true
bool(false) // $flag = int(0) // 0 float(0) // 0.0 string(0)"" // "" string(1)"0" // "0" array(0){} // array() NULL // NULL
int
-
整型,存储整数
$age = 24; var_dump($age); // int(21)
float
-
浮点型,包含小数的数
$score = 59.9; var_dump($score); // float(59.9)
string
- 字符串,可以使用单引号、双引号、定界符三种方法进行定义
单引号
-
单引号定义的字符串不能再包含单引号,如果必须使用单引号则需要用反斜杠
\
进行转义\'
<?php $welcome = 'welcome \'ZhangSan\''; echo $welcome; //输出 welcome 'ZhangSan' ?>
-
php 不会解析单引号中的变量
<?php $name = 'zhangSan'; $msg = 'welcome $name'; echo $msg; //输出 welcome $name ?>
双引号
-
可以包含单引号,无须转义,但包含双引号时需要转义
php 会解析双引号间的变量
<?php $name = "zhangSan"; $msg = "welcome $name"; echo $msg; //输出 welcome zhangSan ?>
-
双引号中要解析的变量通常要用
{}
括起来<?php $name = "zhangSan"; $msg = "welcome {$name}"; echo $msg; //输出 welcome zhangSan ?>
定界符
-
使用情景
当需要定义大段字符串时,并且该字符串出现大量特殊字符(包括反引号、双引号等)
-
定界符定义字符串中的单双引号、大部分特殊字符不需要转义
-
<<< 标志
表示定界符开始,同样的标志;
为结束标识符,定界符结束要顶格,分号之后的此行不可有任何字符(包括空字符) -
定界符中的标志建议使用纯大写字母
-
定界符中的
$
同样会被识别为变量,变量名要用{}
括起来<?php$name = "gjl"; $msg = <<<GJL <h1>My Name is <span style = "color:pink">{$name}</span>!</h1> <script>console.log( 'This message is from info.php! ") </script> GJL; //若结束符后输入任何字符(包括空字符)则会报错Parse error: syntax error, unexpected $end echo $msg; ?>
输出效果
字符串拼接
-
在php中
.
表示拼接$a.$b
<?php $name = "zhangSan"; $message = "welcome,"; echo $message.$name; //输出 welcome,zhangSan ?>
常量
在php脚本执行期间,常量一旦本定义,就不能被改变或取消定义,常量的作用域是全局,有
bool
,int
,float
,string
类型
自定义常量
-
按照惯例常量标识符使用大写定义
-
使用函数
define()
定义<?php define("USERNAME","GJL"); //给常量 USERNAME赋值 GJL echo USERNAME; //输出结果 GJL ?>
尝试对其赋值报错
<?php define("USERNAME","GJL"); USER echo USERNAME; ?>// Parse error: syntax error, unexpected T_ECHO in E:\phpstudy\WWW\php\test.php on line 13
预定义常量
总览
-
PHP已经定义好的,可以直接使用的常量,一般代表特殊含义。
魔术常量是预定义常量中特殊的一类
常量名 常量值 __FILE__
当前文件名,完整路径 __LINE__
当前行号 __FUNCTION__
当前函数名 __CLASS__
当前的类名 __NETHOD__
当前对象的方法名 PHP_OS UNIX | WINNT | Darwin PHP_VERSION 当前 PHP 的版本 DIRECTORY_SEPARATOR \
或/
,根据操作系统决定目录的分隔符
使用
__FILE__
当前文件名,完整路径
<?php
echo __FILE__;
//输出效果 E:\phpstudy\WWW\test.php
?>
__LINE__
当前行号
<?php
echo __LINE__;
//输出效果 2
?>
PHP_OS
操作系统
<?php
echo PHP_OS;
//输出效果 WINNT
?>
PHP_VERSION
当前 PHP 的版本
<?php
echo PHP_VERSION;
//输出效果 5.3.29
?>
DIRECTORY_SEPARATOR
当前目录的分隔符
<?php
echo DIRECTORY_SEPARATOR;
//输出效果 \
?>
常见的运算符
算数运算符
-
除加
+
减-
乘*
除/
取余%
外对
$a
和$b
的运算运算符 计算 结果 -$a
取反 $a 的负值 ++$a
前加 $a 的值+1,然后返回 $a $a++
后加 返回 $a,然后将 $a 的值+1 --$a
前减 $a 的值-1,然后返回 $a $a--
后减 返回 $a,然后将 $a 的值-1
字符串运算符
-
字符串运算符用来拼接字符串
-
JS 语言中,字符串拼接用
+
,预算符.
的作用是访问对象中的属性或方法 -
PHP 中使用
.
进行字符串拼接。PHP 中.
也叫连接运算符<?php $name = "Jucy"; $str = "hello,"; echo $str.$name; //输出效果 hello,Jucy ?>
-
赋值运算符
-
包括
=
,+=
,-=
,*=
,/=
,%=
,.=
-
解释 :
$a ?= $b
即$a = $a ? $b
-
.=
<?php $a = "hello,"; $b = "LiHua"; $a .= $b; echo $a; //输出 hello,LiHua ?>
-
示例
<?php $a = 5; $b = 3; $a *= $b; echo $a; // 输出结果 15 //解释 第四行代码即 $a = $a * $b ?>
比较运算符
-
运算结果为布尔类型
true
或false
运算符 | 说明 | 备注 |
---|---|---|
== | 等于 | 执行== 运算时要求运算符两边的数据类型一致自动强制类型转换 |
=== | 全等 | 全等判断时若两边数据类型不同则直接返回false |
!= | 不等 | |
<> | 不等 | |
!== | 不全等 | |
< | 小于 | |
> | 大于 | |
<= | 小于等于 | |
>= | 大于等于 |
<?php
$a = 3;
$b = 3;
$c = '3';
$j1 = $a == $b;
echo var_dump($j1);
//输出 bool(true)
$j2 = $a === $b;
echo var_dump($j2);
//输出 bool(true)
$j3 = $a == $c;
echo var_dump($j3);
//输出 bool(true)
$j4 = $a === $c;
echo var_dump($j4);
//输出 bool(false)
?>
逻辑运算符
逻辑运算符 | 例子 | 解释 | 运算符规则 |
---|---|---|---|
and && | $a and $b $a && $b | 逻辑"与" | |
or ` | ` | $a or $b `$a | |
xor | $a xor $b | 逻辑"异或" | 相同为假,不同为真 |
! | !$a | 逻辑"非" |
其他运算符
运算符 | 名称 | 举例 | 解释 |
---|---|---|---|
?: | 三目运算 | $a > $b ? $a : $b | 如果 $a > $b 是真值则返回 $a (前)如果 $a > $b 是假值则返回 $b (后) |
`` | 反引号(esc键下方) | 自动调用系统命令 | |
@ | 错误屏蔽 | 屏蔽表达式可能发生的错误 |
-
?:
判断条件 ? true : false
<?php $a = 10; $b = 20; $max = $a > $b ? $a : $b; echo $max; //输出结果 20 //$a > $b是假值,返回$b ?>
-
``
<?php $str = "chcp65001&&ipconfig"; echo `$str`; ?>
输出
格式化输出
<?php $str = "ipconfig"; echo '<pre>'.`$str`; ?>
输出效果
-
@
<?php echo $username; //报错 Notice: Undefined variable: username in E:\phpstudy\WWW\test.php on line 2 echo @$username; //不会报错 ?>
流程控制
顺序执行
-
自上而下顺序执行
默认
<?php echo "1"; echo "<br />"; echo "2"; echo "<br />"; echo "3"; echo "<br />"; ?>
分支执行
-
根据表达式的值是否为 True 选择性执行代码
-
主要通过 if 和 switch 实现
-
进行 if 判断的时,候如果表达式不是布尔类型的值,会自动进行类型转换,将其它类型的值转换成布尔值,以下值被认为是
false
,其他大部分的值则被认为是true
bool(false) int(0) float(0) string(0)"" string(1)"0" array(0){} NULL
if 语句
-
语法
if(//判断条件){//语句块1 }elseif(//判断条件2){//语句块2 }else{//语句块3 } //判断条件为True则执行语句块1,否则执行语句块2
如
<?php $score = 99; if(60 <= $score && $score < 90){echo "ok"; }elseif($score >=90){echo "nb"; }else{echo "lj"; } //输出 nb ?>
switch 语句
-
当需要多项分支结构,并且判断条件是具体某个值,此时大多使用 switch 结构
switch(判断条件){case 值1:语句块;break;case 值2:语句块;break;default: //默认,相当于if中的else语句块;break; }
如
<?php $day = 1; switch($day){case 1:echo "Monday";break;case 2:echo "Tuesday";break;case 8:case 9:echo "gun";break; } //输出 Monday?>
-
注意
- 每个 case 语句都需要加一个 break;
- case表达式的值最好是整型或字符串
- 如果某个 case 后没有接语句块,该判断条件要执行的语句块与下一判断条件所要执行的语句块相同
- case 后的语句块不需要用 {} 括起来
循环执行
while 循环
-
语法
while(表达式){//循环体 }
当表达式为 True 时执行循环体,当循环体执行完一遍时,返回到 while 后的表达式继续判断表达式的值是否为 True ,如果还是 True 则继续循环,直到这个表达式的值为 False ,则该 while 循环结束
-
举例
输出 1 到 100 数字
<?php $i = 1; while($i <= 100){echo $i."<br />";$i++; } ?>
do while 循环
-
语法
<?phpdo{//循环体}while(条件) ?>
-
举例
输出 1 到 100 数字
<?php$i = 1;do{echo $i."<br />";$i ++;}while($i <= 100) ?>
for 循环
-
语法
for(计数器;判断条件;自增或自减){//循环体 }
-
举例
输出 1 到 100 数字
<?phpfor($i=1;$i<=100;$i++){echo $i."<br />";} ?>
特殊的流程控制语句
break 语句
- 用于
switch
,while
,do...while
,foreach
等的终端。后面可以接上一些数字表示跳出几层循环。默认不加就是跳出当前循环。
continue
- 只能用于循环语句,轮空本次循环
exit 函数
-
结束当前 PHP 脚本执行,同
die()
语句exit 中可以输入语句进行输出
exit("php is over")
相关文章:

PHP 基础/练习
练习 成绩定级 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>成绩定级脚本</title> </…...

TCP协议与UDP协议
UDP协议 UDP协议端的格式 16位UDP长度,表示整个数据报(UDP首部UDP数据)的最大长度;如果校验和出错,就会直接丢弃; UDP的特点 UDP传输过程类似寄信 无连接 知道对端的IP和端口号就直接进行传输,不需要建立连接; 不可靠 没有任何安全机制,…...

极智嘉(Geek+)柔性货箱到人拣选方案,助力Starlinks实现高效运营
近些年,电商业务席卷全球,一众企业蓬勃发展。比如沙特阿拉伯先进的物流与供应链解决方案供应商Starlinks的电子商务的销售额从6%增长到了23%。为满足日益增长的国际电商业务需求,以及订单交付时效性更高的要求,Starlinks与全球仓储…...

Hadoop3教程(三十一):(生产调优篇)异构存储
文章目录 (157)异构存储概述概述异构存储的shell操作 (158)异构存储案例实操参考文献 (157)异构存储概述 概述 异构存储,也叫做冷热数据分离。其中,经常使用的数据被叫做是热数据&…...

网络协议--UDP:用户数据报协议
11.1 引言 UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。这与面向流字符的协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联…...

vscode摸鱼插件开发
不知道大家在写代码的时候,摸不摸鱼,是不是时不时得打开一下微博,看看今天发生了什么大事,又有谁塌房,而你没有及时赶上。 为此,我决定开发一个vscode插件,来查看微博热搜 插件名称࿱…...

音频录制和处理软件 Audio Hijack mac中文版说明
Audio Hijack mac是一款功能强大的音频录制和处理软件,它可以帮助用户从各种来源捕获和处理音频。 首先,Audio Hijack具有灵活的音频捕获功能。它支持从多个来源录制音频,包括麦克风、应用程序、网络流媒体、硬件设备等等。你可以选择捕获整个…...

寻找二叉树一个节点的后继节点
后继节点:中序遍历的后一个节点 普通二叉树:中序遍历得到一个list,时间复杂度O(n) 本题的二叉树:有父节点的指针,后继节点与原节点的距离为1,因此可以直接通过父节点找到下一个节点 优化:节点…...

如何能够获取到本行业的能力架构图去了解自己的能力缺陷与短板,从而能清晰的去弥补差距?
如何能够获取到本行业的能力架构图去了解自己的能力缺陷与短板,从而能清晰的去弥补差距? 获取并利用能力架构图(Competency Model)来了解自己在特定行业或职位中的能力缺陷和短板,并据此弥补差距,是一个非常…...

红队打靶:Misdirection打靶思路详解(vulnhub)
目录 写在开头 第一步:主机发现与端口扫描 第二步:Web渗透(80端口,战术放弃) 第三步:Web渗透(8080端口) 第四步:sudo bash提权 第五步:/etc/passwd利…...

10.23归并排序
课上 归并排序 最大时,就是两个都是完全倒序,但注意一定有一个序列先用完,此时剩一个序列只有一个元素,不用比较,直接加入,所以就是nn-1, 最小时,是都是完全有序,且一个序列中的元…...

[C++]:2初识C++(auto) + 类和对象上:
[TOC](初识C(auto) 类和对象上) 一.初始C 1.auto关键字:(C11) 1.作为一个变量的类型给这个类型初始化,auto自动识别初始化这个变量值的类型,为auto类型的这个变量开辟一个合适的空间。 补充: 1.typeid(变量名).name—>可以打…...
大学英语试卷
大学英语试卷 If everyone learns to set forth facts and reason things out in social life, many of the contradictions are easy to ____. A. oblige B. engage C. resolve D. commitIf we let the fastest runner set the____, the others will fall behind. A. pace B.…...

SpringBoot Lombok的使用
目录 下载Lombok插件 Lombok的用法 获取日志对象 生成get,set方法 Lombok框架的实现原理 Lombok的常用注解 下载Lombok插件 要使用Lombok首先要确保idea安装了lombok插件 在项目中添加 lombok依赖 在<dependency>里右键生成点击edit starters 插件(没有就下载,可…...

后台管理系统SQL注入漏洞
对于edu来说,是新人挖洞较好的平台,本次记录一次走运的捡漏0x01 前景 在进行fofa盲打站点的时候,来到了一个后台管理处看到集市二字,应该是edu站点 确认目标身份(使用的quake进行然后去ipc备案查询) 网…...
变量常用函数
查看变量类型 type(变量名) 用来查询变量所指的对象类型 >>> a, b, c, d 20, 5.5, True, 43j >>> print(type(a), type(b), type(c), type(d)) <class int> <class float> <class bool> <class complex> 基础数据类型 # coding…...
从零学算法(LCR 157)
某店铺将用于组成套餐的商品记作字符串 goods,其中 goods[i] 表示对应商品。请返回该套餐内所含商品的 全部排列方式 。 返回结果 无顺序要求,但不能含有重复的元素。 示例 1: 输入:goods “agew” 输出:[“aegw”,“aewg”,“ag…...
mysql 优化 聚簇索引=主键索引吗
在 InnoDB 引擎中,每张表都会有一个特殊的索引“聚簇索引”,也被称之为聚集索引,它是用来存储行数据的。一般情况下,聚簇索引等同于主键索引,但这里有一个前提条件,那就是这张表需要有主键,只有…...
c# ManualResetEvent WaitHandle 实现同步
//本文演示了ManualResetEvent 类的非静态set()、Reset()、WaitOne()和 //WaitHandle类的静态方法WaitAllWaitAll() //它们用于线程间的同步控制。 //实现了如下功能:线程1(定时控制)通知线程2和线程3采集数据 //线程2和3数据采集完了&am…...

使用Packstack安装器安装一体化OpenStack云平台
【实训目的】 初步掌握OpenStack快捷安装的方法。掌握OpenStack图形界面的基本操作。 【实训准备】 (1)准备一台能够安装OpenStack的实验用计算机,建议使用VMware虚拟机。 (2)该计算机应安装CentOS 7,建…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...