成绩定级脚本
=60){
echo"congratulations";
}else{
echo "sorry";
}
}
?>
<!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>
99 乘法表
";
for ($i = 1; $i < 10; $i++) {
echo "";
for ($j = 1; $j <= $i; $j++) {
echo "";
echo "{$j}"."*"."{$i}"."="."{$j}"*"{$i}";
echo " ";
}
echo " ";
}
echo"";
?>
在PHP 文件中,可以与HTML 和JavaScript 混编。
开始标记 表示进入PHP 模式,结束标记
?>
,标识退出PHP 模式。
PHP 模式之外的内容会被作为字符输出到浏览器中。
PHP 在服务端执行,HTML 和 JS 在浏览器执行
HTML 或JavaScript 对于PHP 来说就是纯文本字符串
phpinfo
安全问题:如果是一个在线的网站能够看到phpinfo 页面,说明存在敏感信息泄露漏洞,这个漏洞需要体现在后面的渗透测试报告中。
phpinfo()?>
?>
分号;
,代表一句PHP 代码的结束。
单行注释
该行 //
后的内容为注释内容
phpinfo(); // 该函数会显示PHP 配置信息
多行注释
/*
开始,*/
结束
/*
这是多行注释!
以下语句表示PHP 配置信息
*/
phpinfo();
空白符包括:
空白字符 | 表达 |
---|---|
空格 | |
TAB 制表符 | \t |
回车换行 | \r\n 换行也可以在输出的字符中输出
|
这些空白字符在PHP 中都是无关紧要的,可以将一个语句展开成任意行,或者紧缩在一行,空格与空行的合理运用可以增强代码的清晰性与可读性,如果运用不合理反而会对阅读产生负担!
但是,不能是用空白符打断 PHP 的关键字,例如函数名,语句名,变量名,类名,方法名等等。
例,不打断关键字 phpinfo
依旧可执行
例,打断关键字 phpinfo
形式
$ + 变量名;
严格区分大小写
$name;
$Name;
$NAME
//三个变量不是同一个变量
字母、数字、下划线组成,不能以数字开头,不能包含其他字符(空白字符、特殊字符)
驼峰式命名法、下划线式命名法
$first_name;
$firstName;
$FirstName;
标识符(关键字)尽量不作为变量名
echo
输出字符串
$username="gjl";
echo $username;
//在网页输出 gjl
?>
unset()
函数
unset($变量名);
$username="gjl";
unset($username);
echo $username;
//报错Notice: Undefined variable: username in E:\phpstudy\WWW\test.php on line 4
//未定义变量
?>
可变变量:
一个变量的名字可以动态设置和使用
也是 php 中变量覆盖漏洞的原因之一
定义:
$$
使用举例
$username="gjl";
$gjl="GuoJialiang";
echo $$username;
//输出 GuoJialiang
//$($username)
?>
应用
$username="gjl";
$gjl="GuoJialiang";
$$username="liang";
echo $gjl;
//输出 liang
?>
将变量类型输出使用函数 var_dump()
$name = "ZhangSan";
var_dump($name);
//输出 string(8) "ZhangSan"
//长度为8的字符串“ZhangSan”
?>
$sex = true;
var_dump($sex);
$age = 24;
var_dump($age);
$score = 59.9;
var_dump($score);
//输出 bool(true) int(24) float(59.9)
?>
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
整型,存储整数
$age = 24;
var_dump($age);
// int(21)
浮点型,包含小数的数
$score = 59.9;
var_dump($score);
// float(59.9)
单引号定义的字符串不能再包含单引号,如果必须使用单引号则需要用反斜杠 \
进行转义 \'
$welcome = 'welcome \'ZhangSan\'';
echo $welcome;
//输出 welcome 'ZhangSan'
?>
php 不会解析单引号中的变量
$name = 'zhangSan';
$msg = 'welcome $name';
echo $msg;
//输出 welcome $name
?>
可以包含单引号,无须转义,但包含双引号时需要转义
php 会解析双引号间的变量
$name = "zhangSan";
$msg = "welcome $name";
echo $msg;
//输出 welcome zhangSan
?>
双引号中要解析的变量通常要用 {}
括起来
$name = "zhangSan";
$msg = "welcome {$name}";
echo $msg;
//输出 welcome zhangSan
?>
使用情景
当需要定义大段字符串时,并且该字符串出现大量特殊字符(包括反引号、双引号等)
定界符定义字符串中的单双引号、大部分特殊字符不需要转义
<<< 标志
表示定界符开始,同样的标志;
为结束标识符,定界符结束要顶格,分号之后的此行不可有任何字符(包括空字符)
定界符中的标志建议使用纯大写字母
定界符中的 $
同样会被识别为变量,变量名要用 {}
括起来
$name = "gjl";
$msg = <<<GJL
My Name is {$name}!
GJL;
//若结束符后输入任何字符(包括空字符)则会报错Parse error: syntax error, unexpected $end
echo $msg;
?>
输出效果
在php中 .
表示拼接
$a.$b
$name = "zhangSan";
$message = "welcome,";
echo $message.$name;
//输出 welcome,zhangSan
?>
在php脚本执行期间,常量一旦本定义,就不能被改变或取消定义,常量的作用域是全局,有
bool
,int
,float
,string
类型
按照惯例常量标识符使用大写定义
使用函数 define()
定义
define("USERNAME","GJL");
//给常量 USERNAME赋值 GJL
echo USERNAME;
//输出结果 GJL
?>
尝试对其赋值报错
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__
当前文件名,完整路径
echo __FILE__;
//输出效果 E:\phpstudy\WWW\test.php
?>
__LINE__
当前行号
echo __LINE__;
//输出效果 2
?>
PHP_OS
操作系统
echo PHP_OS;
//输出效果 WINNT
?>
PHP_VERSION
当前 PHP 的版本
echo PHP_VERSION;
//输出效果 5.3.29
?>
DIRECTORY_SEPARATOR
当前目录的分隔符
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 中 .
也叫连接运算符
$name = "Jucy";
$str = "hello,";
echo $str.$name;
//输出效果 hello,Jucy
?>
包括 =
, +=
, -=
, *=
, /=
, %=
, .=
解释 :$a ?= $b
即 $a = $a ? $b
.=
示例
$a = 5;
$b = 3;
$a *= $b;
echo $a;
// 输出结果 15
//解释 第四行代码即 $a = $a * $b
?>
运算结果为布尔类型
true
或 false
运算符 | 说明 | 备注 |
---|---|---|
== |
等于 | 执行== 运算时要求运算符两边的数据类型一致自动强制类型转换 |
=== |
全等 | 全等判断时若两边数据类型不同则直接返回false |
!= |
不等 | |
<> |
不等 | |
!== |
不全等 | |
< |
小于 | |
> |
大于 | |
<= |
小于等于 | |
>= |
大于等于 |
$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
$a = 10;
$b = 20;
$max = $a > $b ? $a : $b;
echo $max;
//输出结果 20
//$a > $b是假值,返回$b
?>
``
$str = "chcp65001&&ipconfig";
echo `$str`;
?>
输出
格式化输出
$str = "ipconfig";
echo ''
.`$str`;
?>
输出效果
@
echo $username;
//报错 Notice: Undefined variable: username in E:\phpstudy\WWW\test.php on line 2
echo @$username;
//不会报错
?>
自上而下顺序执行
默认
echo "1";
echo "
";
echo "2";
echo "
";
echo "3";
echo "
";
?>
根据表达式的值是否为 True 选择性执行代码
主要通过 if 和 switch 实现
进行 if 判断的时,候如果表达式不是布尔类型的值,会自动进行类型转换,将其它类型的值转换成布尔值,以下值被认为是false
,其他大部分的值则被认为是true
bool(false)
int(0)
float(0)
string(0)""
string(1)"0"
array(0){}
NULL
语法
if(//判断条件){
//语句块1
}elseif(//判断条件2){
//语句块2
}else{
//语句块3
}
//判断条件为True则执行语句块1,否则执行语句块2
如
$score = 99;
if(60 <= $score && $score < 90){
echo "ok";
}elseif($score >=90){
echo "nb";
}else{
echo "lj";
}
//输出 nb
?>
当需要多项分支结构,并且判断条件是具体某个值,此时大多使用 switch 结构
switch(判断条件){
case 值1:
语句块;
break;
case 值2:
语句块;
break;
default: //默认,相当于if中的else
语句块;
break;
}
如
$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(表达式){
//循环体
}
当表达式为 True 时执行循环体,当循环体执行完一遍时,返回到 while 后的表达式继续判断表达式的值是否为 True ,如果还是 True 则继续循环,直到这个表达式的值为 False ,则该 while 循环结束
举例
输出 1 到 100 数字
$i = 1;
while($i <= 100){
echo $i."
";
$i++;
}
?>
语法
do{
//循环体
}while(条件)
?>
举例
输出 1 到 100 数字
$i = 1;
do{
echo $i."
";
$i ++;
}while($i <= 100)
?>
语法
for(计数器;判断条件;自增或自减){
//循环体
}
举例
输出 1 到 100 数字
for($i=1;$i<=100;$i++){
echo $i."
";
}
?>
switch
,while
,do...while
,foreach
等的终端。后面可以接上一些数字表示跳出几层循环。默认不加就是跳出当前循环。结束当前 PHP 脚本执行,同 die()
语句
exit 中可以输入语句进行输出
exit("php is over")