前言
最近在学习文件上传漏洞,因此接触到大量的php代码,借此机会系统地学习了一下php,整理记录如下
文章目录
一、代码样式
Ⅰ. 代码组成
序号 | 代码 | 描述 |
---|---|---|
1 | <?php ... ?> | PHP标记 |
2 | ... | php代码:函数、流程控制、类… |
3 | ; 、{} | 语句结束符 |
4 | 注释 | // 单行注释 、 /* 多行注释 */ (php不使用#来注释) |
5 | 空白符 | 合理使用,增强代码可读性 |
Ⅱ. php标记
<?php
// php代码
?>
Ⅲ. php常用输出打印函数
序号 | 指令 | 描述 |
---|---|---|
1 | echo | 输出一个或多个字符串,可以用逗号隔开 |
2 | print() | 打印输出一个字符串 |
3 | print_r() | 打印关于一个变量的易于理解的信息 |
4 | var_dump() | 打印变量的类型及其值,数组和对象将以递归形式展现值 |
二、变量与常量
Ⅰ. 变量
- 开头不能是数字
- 中间不能有空格
- 声明、使用变量时,需要在其前面加上
$
<?php
$a = "我是一个字符串!!";
echo $a;
?>
Ⅱ. 常量
- 开头不能是数字
- 使用
define()
来创建常量,或const
- 不需要再加$
define(Cons_1,"我是一个常量");
echo Cons_1;
const Cons_2 = "我也是一个常量"
echo Cons_2;
三、数据类型
Ⅰ.php标量数据类型
序号 | 类型 | 描述 |
---|---|---|
1 | 布尔型 Boolean | true 和 flase |
2 | 整型 Integer | 整数(负数、0、无限大) |
3 | 浮点型 Float | 带小数的数字(负数、0、无限大) |
4 | 字符串 String | 字符 |
echo用于输出数据值
开发时测试使用var_dump来同时打印数据类型和值
1. 布尔型
-
用于条件判断
<?php $a = true; var_dump($a); echo '<hr/>'; // <hr/>是HTML中的水平线 $b = false; var_dump($b); ?>
2. 整型
-
可以用三种格式来指定:十进制、十六进制、八进制
<?php $num = 0; var_dump($num); echo '<hr/>'; $num = 123; var_dump($num); echo '<hr>'; $num = -369; var_dump($num); ?>
3. 浮点型
-
带小数的数字
<?php $num = 10.01; var_dump($num); echo "<hr/>"; $num = -123; var_dump($num); ?>
4. 字符串
-
单引号或双引号内的字符
-
一个汉字占有三个字符长度
-
双引号可以解析变量,而单引号却不行
-
用
.
可以拼接连接两个字符串<?php $str = '我是一个字符串'; var_dump($str); echo "<hr/>"; $str = "$str = I am a string"; //双引号可以解析变量 var_dump($str); echo "<hr/>"; $str = '$str = I am a string'; //单引号不能解析变量 var_dump($str); ?>
Ⅱ.复合数据类型
序号 | 类型 | 描述 |
---|---|---|
1 | array | 数组 |
2 | object | 对象 |
3 | callable | 可调用的 |
4 | iterable | 可迭代的 |
Ⅲ.特殊数据类型
序号 | 类型 | 描述 |
---|---|---|
1 | 空值NULL | 表示"变量没有值" |
2 | resource | 资源,比如由fopen()创建的文件系统指针 |
1. NULL
-
NULL表示"变量没有值"
<?php $var_null; var_dump($var_null); //变量var_null没有值,但会提示警告变量未赋值 echo "<hr/>"; $var_null = ''; var_dump($var_null); //变量var_null有值,但为空 echo "<hr/>"; $var_null = null; var_dump($var_null); //变量var_null被赋值为null,此时则不会警告,因为这个“没有值”是我们在上一条语句中赋给它的 // NULL // ----------------------------- // string(0) "" // ----------------------------- // NULL ?>
Ⅳ.数组
类型 | 描述 |
---|---|
数组array | 可以在一个数组变量中存储多个值 |
1.创建空数组
<?php
$arr = array();
var_dump($arr);
echo "<hr/>";
$arrs = [];
var_dump($arrs);
// array(0) { }
// ---------------------------------
// array(0) { }
?>
2.创建索引数组
<?php
$arr = array(
'AB','CD','EF'
);
var_dump($arr);
// array(3) { [0]=> string(2) "AB" [1]=> string(2) "CD" [2]=> string(2) "EF" }
?>
<?php
$arr = [];
$arr[0] = 'webshell.php';
$arr[2] = 'png';
// 数组的下标不一定要连续,比如这里$arr就没有下标1
// echo $arr[1] => NULL
?>
3.创建关联数组(类似于“字典”)
<?php
$arr = array(
'First' => 'AB', 'Second' => 'CD', 'Third' => 'EF'
);
var_dump($arr);
// array(3) { ["First"]=> string(2) "AB" ["Second"]=> string(2) "CD" ["Third"]=> string(2) "EF" }
?>
4. 多维数组
<?php
// 三维数组
$arr1 = array(
'最外层',
array('中间层',
array('最内层'
),
),
);
var_dump($arr1);
echo "<hr/>";
// 三维数组的另一形式
$arr2 = [
['My_name' => [
'first_name' => 'Bob',
'last_name' => 'Trump'
]
],
['Birth_Day' => [
'year' => '2000',
'month' => '10',
'day' => '27'
]
]
];
var_dump($arr2);
echo "<hr/>";
echo $arr2[1]['Birth_Day']['day'];
// array(2) { [0]=> string(9) "最外层" [1]=> array(2) { [0]=> string(9) "中间层" [1]=> array(1) { [0]=> string(9) "最内层" } } }
// -------------------------------------------------
// array(2) { [0]=> array(1) { ["My_name"]=> array(2) { ["first_name"]=> string(3) "Bob" ["last_name"]=> string(5) "Trump" } } [1]=> array(1) { ["Birth_Day"]=> array(3) { ["year"]=> string(4) "2000" ["month"]=> string(2) "10" ["day"]=> string(2) "27" } } }
// -------------------------------------------------
// 27
?>
Ⅴ.数组遍历
1. 利用foreach
<?php
$arr = array(
'firstName' => 'Alice',
'lastName' => 'Green',
'age' => '19'
);
foreach($arr as $value){
echo "$value";
echo '<hr/>';
}
// Alice
// --------------------------------------
// Green
// --------------------------------------
// 19
// --------------------------------------
?>
2. 利用key
和value
<?php
$arr = array(
'firstName' => 'Alice',
'lastName' => 'Green',
'age' => '19'
);
foreach($arr as $key => $value){
echo "$key"."=>"."$value";
echo '<hr/>';
}
// firstName=>Alice
// --------------------------------------
// lastName=>Green
// --------------------------------------
// age=>19
// --------------------------------------
?>
3. 多维数组的遍历
<?php
// 三维数组
$arr = [
['My_name' => [
'first_name' => 'Bob',
'last_name' => 'Trump'
]
],
['Birth_Day' => [
'year' => '2000',
'month' => '10',
'day' => '27'
]
]
];
// 使用三重foreach来遍历
foreach($arr as $k => $v){
foreach($v as $vv){
foreach($vv as $vvv){
var_dump($vv);
}
}
}
// array(2) { ["first_name"]=> string(3) "Bob" ["last_name"]=> string(5) "Trump" } array(2) { ["first_name"]=> string(3) "Bob" ["last_name"]=> string(5) "Trump" } array(3) { ["year"]=> string(4) "2000" ["month"]=> string(2) "10" ["day"]=> string(2) "27" } array(3) { ["year"]=> string(4) "2000" ["month"]=> string(2) "10" ["day"]=> string(2) "27" } array(3) { ["year"]=> string(4) "2000" ["month"]=> string(2) "10" ["day"]=> string(2) "27" }
?>
四、流程控制
Ⅰ.三元运算符
根据写在
?
左边的表达式的布尔值来判断,若是true返回:
左边的内容,若是flase则返回:
左边的内容
<?php
$str = 'Tom';
echo $str ? 'I am '.$str:"I don't know who I am";
// I am Tom
?>
Ⅱ. if…elseif…else
<?php
$var = 123;
if($var < 100){
echo "这个数是".$var.", 小于100";
}
elseif($var==100) {
echo "这个数是".$var.", 等于100";
}
else{
echo "这个数是".$var.", 大于100";
}
// 这个数是123, 大于100
?>
Ⅲ.switch…case…default
<?php
$var = 3;
switch($var){
case 1:
echo "我是1";
break;
case 2:
echo "我是2";
break;
default:
echo "我不是1或2";
break;
}
// 我不是1或2
?>