本篇主要讲述php定界符EOF,PHP 类型比较,PHP 常量,PHP 并置运算符,三元运算符,组合比较符,遍历数值数组,关联数组,遍历关联数组,多维数组。
php定界符EOF
例如:
<?php
$name="yuaneuro";
$a= <<<EOF
"abc"$name
"123"
EOF;
// 结束需要独立一行且前后不能空格
echo $a;
?>
运行结果:
"abc"yuaneuro
"123"
注意:
- 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
- 在 PHP 定界符 EOF 中的任何特殊字符都不需要转义;
PHP 类型比较
在php中有两种比较方式松散和严格比较
- 松散比较:使用两个等号
==
比较,只比较值,不比较类型。 - 严格比较:用三个等号
===
比较,除了比较值,也比较类型。
在ctf中有一种很常见的题目:
if (isset($_GET['a']) and isset($_GET['b'])) {
if ($_GET['a'] != $_GET['b'])
if (md5($_GET['a']) === md5($_GET['b']))
die('Flag: '.$flag);
else
print 'Wrong.';
}
这里要求传入的a和b不相等,且md5值相等,就可以利用php弱类型绕过
payload:?a[]=1&b[]=2
PHP 常量
设置常量,使用 define() 函数,函数语法如下:
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
- name:必选参数,常量名称,即标志符。
- value:必选参数,常量的值。
- case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。
例如:
<?php
define("yuaneuro", "欢迎访问 yuaneu.ro");
function myTest() {
echo yuaneuro;
}
myTest(); // 输出 "欢迎访问 yuaneu.ro"
?>
注意:
- 常量是全局的
- 常量名不需要加 $ 修饰符
PHP 并置运算符
- 并置运算符 (
.
) 用于把两个字符串值连接起来。
例如:
<?php
$txt1="Hello world!";
$txt2="What a nice day!";
echo $txt1 . "yuaneuro " . $txt2;
?>
就会输出:Hello world!yuaneuro What a nice day!
三元运算符
-
(expr1) ? (expr2) : (expr3)
对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。 -
在php5.3+中表达式
expr1 ?: expr3
在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。 -
在 PHP7+ 版本多了一个 NULL 合并运算符
??
$username = $_GET['user'] ?? 'nobody';
如果 $_GET['user'] 不存在返回 'nobody',否则返回 $_GET['user'] 的值
组合比较符(PHP7+)
也称之为太空船操作符,符号为 <=>
语法 $c = $a <=> $b;
解析如下:
- 如果 $a > $b, 则 $c 的值为 1。
- 如果 $a == $b, 则 $c 的值为 0。
- 如果 $a < $b, 则 $c 的值为 -1。
遍历数值数组
可以使用 for
循环
<?php
$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars); //获取数组的长度
for($x=0;$x<$arrlength;$x++)
{
echo $cars[$x]; //ID 键
echo "<br>";
}
?>
关联数组
- 关联数组是使用您分配给数组的指定的键的数组
例如:
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
调用则可直接使用$age["Peter"]
即可
遍历关联数组
可以使用 foreach
循环
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
foreach($age as $x=>$x_value)
{
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
?>
多维数组
一个数组中的值可以是另一个数组,另一个数组的值也可以是一个数组。依照这种方式,我们可以创建多维数组:
<?php
$sites = array
(
"yuaneuro"=>array
(
"yuaneuro的小站",
"https://yuaneu.ro"
),
"google"=>array
(
"Google搜索",
"http://www.google.com"
),
"taobao"=>array
(
"淘宝",
"http://www.taobao.com"
)
);
print("<pre>"); // 格式化输出数组
print_r($sites);
print("</pre>");
?>
输出结果:
其他
- 用户定义的函数和语言关键字对大小写不敏感。
- 声明常量使用关键字 define,例如
define(PI,3.14);
printf("PI = %.2f\n",PI); \\
是单引号字符串字面量中的一个特殊情况,它给出了一个单引号字符串字面量中没有插入\
,\n
strpos()
函数查找字符串在另一字符串中第一次出现的位置,对大小写敏感。array_keys()
函数返回包含数组中所有键名的一个新数组,如果提供了第二个参数,则只返回键值为该值的键名。