0.网站基本知识:
1.常见的网站服务器有三种: Apache, Nginx 和 IIS。
- Apache : 免费,稳定,并发不高
- Nginx : 免费,高并发,没有 Apache 稳定
- IIS : 收费,仅限于 Windows 平台
2. 本地域名解析 : hosts文件: C:\Windows\System32\drivers/etc 下
快捷方式: windows键 + R 输入 drivers
3. windows 下 PHP 运行环境简单配置: phpStudy + subline
- 打开phpstudy,点击切换版本,选择合适的 php版本和服务器(多选nginx)
- 点击 ‘启动’,启动phpstudy;
- 打开 subline,选择 phpstudy 安装文件下的 www 路径。phpStudy/PHPTutorial/WWW
- 在 www文件下写php 代码,
- 浏览器访问路由: localhost/index.php
1.基本的 PHP 语法
- 1. PHP 脚本可以放在文档中的任何位置。
- 2. PHP 脚本以 <?php 开始,以 ?> 结束:
<?php // PHP 代码 ?>
- 3. PHP 文件的默认文件扩展名是 ".php"。
- 4. PHP 中的每个代码行都必须以分号结束。“ ;”分号是一种分隔符,用于把指令集区分开来。
- 5. PHP 文件通常包含 HTML 标签和一些 PHP 脚本代码。通过 PHP,有两种在浏览器输出文本的基础指 令: echo 和 print。
- 6. 单行注释 // 或 # ; 多行注释 /* */
<!DOCTYPE html> <html> <body> <h1>My first PHP page</h1> <?php echo "Hello World!"; ?> <?php // 这是 PHP 单行注释 /* 这是 PHP 多行 注释 */ ?> </body> </html>
2. PHP 变量
1. PHP 变量规则:
- 变量以 $ 符号开始,后面跟着变量的名称
- 变量名必须以字母或者下划线字符开始
- 变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
- 变量名不能包含空格
- 变量名是区分大小写的($y 和 $Y 是两个不同的变量)
2. global 关键字用于函数内访问全局变量。在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 global 关键字:
3. 删除变量 : unset($value)
4. 预定义变量:PHP系统内部定义的变量,也是PHP系统自动收集的数据结果。
- 预定义变量也是表量,符合变量规则;
- 预定义变量都是数组(数据组合,有多个数据在一起);
- 系统提供了 9 个预定义变量,每个变量都有自己特定的数据
- $_GET : 用户通过 get 方式提交的数据; ( 与表单和 URL对应)
- $_POST : 用户通过 post 方式提交的数据; (与表单对应)
- $_REOUEST : 用户通过 get 和 post 提交的数据;
- $_SERVER : 用户和服务器的基本信息数据(数据的名字不由开发者控制,系统已经定义好)
- $_FILES : 用户提交的文件数据(文件上传);
- $_SESSION : session 数据;
- $_COOKIE : cookie 数据;
- $GLOBALS : 所用全局变量,也是唯一一个不是以下划线开始的预定义变量;
- $_ENV : 环境变量
5. 变量传值:
- 值传递 : 定义新变量,将存在的变量赋值给新变量; $c = $a;
- 引用传递 :定义新变量,将存在的变量所指向的内存地址(&)赋值给新变量。 $d = &$a;
6. 常量:一种存贮数据的符号(1. 常量通常大写字母;2. 常量数据一旦定义,不可改变。)
1.定义常量
- 使用函数 define('常量名' , 常量值 )
- 使用关键字 const 常量名 = 常量值
2. 访问常量
- 直接访问 : 常量名;
- 使用函数: constant('常量名')
示例; # 使用函数定义 define('name','jack'); # 使用关键字定义: const home = 'shanghai'; #直接访问 echo name; echo home; # 使用函数访问 echo constant('name'),'<br/>'; echo constant('home');
7. 系统常量:系统内部定义的常量,用户可以直接访问,也只能访问
固定系统常量:值是固定的
- PHP_VERSION : PHP版本号
- PHP_INT_SIZE : PHP中整数所占用的字节数
- PHP_INT_MAX : PHP中整数能表示的最大数
魔术常量 :以双下划线__开始,也以双下划线__结束
- __DIR__ : 当前运行文件的所在绝对路径;
- __FILE__: 当前运行文件的绝对路径(带文件名);
- __LINE__: 当前代码所在的行号;
- __FUNCTION__: 函数内部使用,表示当前函数的名字。
在 PHP 中有两个基本的输出方式: echo 和 print。
echo 和 print 区别:
- echo - 可以输出一个或多个字符串
- print - 只允许输出一个字符串,返回值总为 1
- 提示:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。
echo 语句:
- echo 是一个语言结构,使用的时候可以不用加括号,也可以加上括号: echo 或 echo()。
- echo 命令输出字符串(字符串可以包含HTML标签)
print 语句:
- print 同样是一个语言结构,可以使用括号,也可以不使用括号: print 或 print()。
- print 命令输出字符串(字符串可以包含 HTML 标签)
数据类型 :
String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值)。
var_dump() 函数返回变量的数据类型和值; 如果变量不存在则返回 NULL。该函数有输出的功能,因此不必加其它的输出函数。
字符串变量
注释:当您赋一个文本值给变量时,请记得给文本值加上单引号或者双引号。
## PHP 并置运算符 : ( . ) 用于把两个字符串值连接起来。
## PHP strlen() 函数 : strlen() 函数返回字符串的长度(字符数)。
## PHP strpos() 函数 : strpos() 函数用于在字符串内查找一个字符或一段指定的文本。
如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。
- 布尔类型 :
- 布尔类型只有两个值 :true 和 false
- 布尔值不区分大小写 :true 和 TRUE 一样
- 布尔类型通常不说用来存储数据,而是程序用来进行过程或者结果判定使用。
- 字符串型 :
- 单引号字符串:使用英文单引号 ' ' 包裹字符;
- 里面能解析少量转义符 : 单引号 ( \' ) , 反斜杠( \\ )
- 双引号字符串:使用英文双引号 " " 包裹字符;
- 里面能解析较多转义符 :$符号(\$), 双引号( \""),反斜杠( \\ ),回车换行符(\r\n) ,tap符( \t )
- 里面如果有 PHP变量,也可以被解析。
- 变量不要与其他字母或者数字保留在一起;如 $abc,系统默认为 $abc 而不是:$a;
- 解决方案:1)让变量与后面的内容之间有空格,如 $a bc ,系统会识别 $a;
- 2) 使用 {} 将变量独立包裹,如 {a} bc
- 定界符:使用PHP中的定界符 <<<标识符 + 标识符结尾形式包裹(多行字符串的一种形式)
- heredoc 结构 : 双引号的一种多行字符串形式
- nowdoc 结构 :单引号的一种多行字符串形式
// 定界符 // heredoc $str3 = <<<EOF 这里都是字符串 EOF; // nowdoc $str4 = <<<'EOF' 这里是定界符 EOF; echo $str3,'<br/>',$str4;
定界符内的所有内容都是字符串的内容(包括注释);
定界符的起始符号之后不能有任何信息,包括空格;
定界符的结束符号必须顶格,定界符的结束符号后同样不能有任何信息;
数组
## 数组能够在单个变量中存储多个值;
1. 用于创建数组: array(); 或者 [ ]
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); $re = ["Peter"=>"35","Ben"=>"37","Joe"=>"43"];
2. 在 PHP 中,有三种类型的数组:
- 数值数组 - 带有数字 ID 键的数组
- 关联数组 - 带有指定的键的数组,每个键关联一个值
- 多维数组 - 包含一个或多个数组的数组。 ($p [ ] = arry(数组) 给多维数组加元素数组)
3. 获取数组的长度 - count() 函数;
3. 删除元素 :使用 unset(), 指定数组变量加上 [下标], 删除指定下标; 指定变量,删除整个数组
4. 遍历数值数组:(可使用 for 循环 )
<?php $cars=array("Volvo","BMW","Toyota"); $arrlength=count($cars); for($x=0;$x<$arrlength;$x++) { echo $cars[$x]; echo "<br>"; } ?>
5. 遍历关联数组 : (可使用 foreach 循环)
<?php $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); foreach($age as $x=>$x_value) { echo "Key=" . $x . ", Value=" . $x_value; echo "<br>"; } ?>
数组排序
数组中的元素可以按字母或数字顺序进行降序或升序排列。
- sort() - 对数组进行升序排列
- rsort() - 对数组进行降序排列
- asort() - 根据关联数组的值,对数组进行升序排列
- ksort() - 根据关联数组的键,对数组进行升序排列
- arsort() - 根据关联数组的值,对数组进行降序排列
- krsort() - 根据关联数组的键,对数组进行降序排列
类型判定:
(类型判定是用到PHP提供的系统函数,函数以 is_+ 数据类型
- is_int : 判定整型 (is_integer)
- is_float : 判定浮点型;
- is_bool :判定布尔型( is_boolean)
- is_string : 判定字符串型;
- is_null : 判定空型;
- is_array : 判定数组型;
- is_resourse : 判定资源型;
- is_object : 判定对象型;
- is_numeric : 判定是否是数值或者数值型字符串;
- is_scalar : 判定是否是基础数据类型(整型,浮点型,布尔型,字符串型)。
类型转换:
- 自动转换:系统自动识别;
- 强制转换: 资源和 null 不能强制转换。
- integer : 转换成整型;
- float : 转换成浮点型;
- bool : 转换成布尔类型;
- string : 转换成字符串类型;
- array : 转换成数组类型;
- object : 转换成对象类型。
- ex : echo (float)$value ; 只是对数值操作,不改变类型
- ex : settype($value , 'float') 改变类型
echo,print,print_r,var_dump 的区别
1.echo
输出一个或者多个字符串。
2.print
和 echo 最主要的区别: print 仅支持一个参数,并总是返回 1。
3.print_r
打印关于变量的易于理解的信息,如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。 记住,print_r() 将把数组的指针移到最后边。使用 reset() 可让指针回到开始处。
4.var_dump
此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
5.var_dump 和 print_r 的区别
var_dump 返回表达式的类型与值而 print_r 仅返回结果,相比调试代码使用 var_dump 更便于阅读。
PHP 类型比较
- 松散比较:使用两个等号 == 比较,只比较值,不比较类型。
- 严格比较:用三个等号 === 比较,除了比较值,也比较类型。
错误抑制符:
- 错误抑制符是用来抑制可能出现的错误的;
- 抑制级别 : notice, warning 低级别错误;
- 错误抑制符 @ 应该用在出现错误的位置;
- 如果只是一个表达式错误,那么直接 @;
- 如果错误是一个过程,那么需要先将过程使用 ()包起来,然后进行抑制。
PHP 运算符
PHP 比较运算符:
运算符 名称 描述 实例 x == y 等于 如果 x 等于 y,则返回 true 5==8 返回 false x === y 绝对等于 如果 x 等于 y,且它们类型相同,则返回 true 5==="5" 返回 false x != y 不等于 如果 x 不等于 y,则返回 true 5!=8 返回 true x <> y 不等于 如果 x 不等于 y,则返回 true 5<>8 返回 true x !== y 绝对不等于 如果 x 不等于 y,或它们类型不相同,则返回 true 5!=="5" 返回 true x > y 大于 如果 x 大于 y,则返回 true 5>8 返回 false x < y 小于 如果 x 小于 y,则返回 true 5<8 返回 true x >= y 大于等于 如果 x 大于或者等于 y,则返回 true 5>=8 返回 false x <= y 小于等于 如果 x 小于或者等于 y,则返回 true 5<=8 返回 true
x <= >y 小于等于大于 左边大于右边返回1,等于右边返回0,小于右边返回 -1 合并运算: ??
- $value = $a ?? 10; 存在结果,取原始数据$a; 不存在,使用替代结果 10;
- $site = $_GET['site'] ?? 'php中文网';
- $site = isset($_GET['site']) ? $_GET['site'] : 'php中文网'; (老版本书写方式)
连接运算符 : .
ex: $a = 'hello'; $b = 'world'; echo $a . $b ;
三元运算符
语法格式 : (expr1) ? (expr2) : (expr3)
对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。
自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
简化的三目运算 :
表达式1?:表达式3 === 表达式 1 ??表达式 3 (不完全等价;三目运算是判定表达式1 的结果是否为真;而合并运算是判定表达式1 是否存在 )
PHP 逻辑运算符
# 逻辑运算(将所有表达式的结果转换成布尔结果之后再进行运算) :
1. $ res = $age < 18 || $age > 65; 返回 true 或者 false;
# 短路运算(逻辑与,逻辑或) :
2. $ age > 65 || $b = 10 ; var_dump($b) ; 如果前面不成立,会给后面 $b 赋值;
# 前面的操作如果不成功那么代码没有必要继续执行
3. $a = false or die('错误'); echo $a;
# 自操作运算(针对一个变量的自我操作运算,能够让变量实现自我规律改变)
1. 自操作运算只需要一个变量即可;
2. 自操作运算分为两种
- ++ : 变量自增,即自己加 1 ,然后赋值给 自己
- -- : 变量自减,既自己减 1 ,然后赋值给自己
3. 自操作符号分前置和后置
- 前置自操作符 : 先运算自己,然后把改变后的结果去参与其他运算;
- 后置自操作符 : 先把自己当前的值保留区参与其他运算,然后再运算自己
$a = $b = 10 ;
echo $a++,++$b; (10,11)
echo $a,$b; (11,11)
运算符 名称 描述 实例 x and y 与 如果 x 和 y 都为 true,则返回 true x=6
y=3
(x < 10 and y > 1) 返回 truex or y 或 如果 x 和 y 至少有一个为 true,则返回 true x=6
y=3
(x==6 or y==5) 返回 truex xor y 异或 如果 x 和 y 有且仅有一个为 true,则返回 true x=6
y=3
(x==6 xor y==3) 返回 falsex && y 与 如果 x 和 y 都为 true,则返回 true x=6
y=3
(x < 10 && y > 1) 返回 truex || y 或 如果 x 和 y 至少有一个为 true,则返回 true x=6
y=3
(x==5 || y==5) 返回 false! x 非(取反) 如果 x 不为 true,则返回 true x=6
y=3
!(x==y) 返回 truePHP 数组运算符
运算符 名称 描述 x + y 集合 x 和 y 的集合 x == y 相等 如果 x 和 y 具有相同的键/值对,则返回 true x === y 恒等 如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true x != y 不相等 如果 x 不等于 y,则返回 true x <> y 不相等 如果 x 不等于 y,则返回 true x !== y 不恒等 如果 x 不等于 y,则返回 true
PHP 条件语句 :
在 PHP 中,提供了下列条件语句:
- if 语句 - 在条件成立时执行代码
- if...else 语句 - 在条件成立时执行一块代码,条件不成立时执行另一块代码
- if...elseif....else 语句 - 在若干条件之一成立时执行一个代码块
switch 语句 (凡是 switch能做的分支,if都能做;但是if能做的 switch 不一定能做 )
switch结构: switch(条件变量){ case 值: 满足条件 1 要执行的代码快 代码执行控制 : break ... default : 不满足所有条件执行的代码快 代码执行控制 : break } 1. 确定目标条件: 条件必须是颗粒度的,通常是一个变量(没有比较符号) 2. 一个条件对应一个 case 指令; 3. 确定每个case 指令是否需要结束 . 结束使用 break . 不结束,代码会继续执行下一个 case 的代码快(代码块共享) 4. 确定是否需要不满足条件的代码块: default . 没有 : 结束; . 有 : 确定 default 的代码块 $day = 6; switch($day){ case 1: echo '今天是星期一'; break; case 2: case 3: case 4: case 5: echo '继续上班'; break; default : echo '要放假了'; break; }
## PHP - if 语句
if 语句用于仅当指定条件成立时执行代码。
语法 : if (条件) { 条件成立时要执行的代码; }
## PHP - if...else 语句
在条件成立时执行一块代码,条件不成立时执行另一块代码,请使用 if....else 语句。
语法 : if (条件)
{
条件成立时执行的代码;
}
else
{
条件不成立时执行的代码;
}##
PHP - if...elseif....else 语句
在若干条件之一成立时执行一个代码块,请使用 if....elseif...else 语句。.
语法 :
if (条件) { if 条件成立时执行的代码; } elseif (条件) { elseif 条件成立时执行的代码; } else { 条件不成立时执行的代码; }
PHP Switch 语句
用于根据多个不同条件执行不同动作;
工作原理:首先对一个简单的表达式 n(通常是变量)进行一次计算。将表达式的值与结构中每个 case 的值进行比较。如果存在匹配,则执行与 case 关联的代码。代码执行后,使用 break 来阻止代码跳入下一个 case 中继续执行。default 语句用于不存在匹配(即没有 case 为真)时执行。
语法 <?php switch (n) { case label1: 如果 n=label1,此处代码将执行; break; case label2: 如果 n=label2,此处代码将执行; break; default: 如果 n 既不等于 label1 也不等于 label2,此处代码将执行; } ?> 实例 <?php $favcolor="red"; switch ($favcolor) { case "red": echo "你喜欢的颜色是红色!"; break; case "blue": echo "你喜欢的颜色是蓝色!"; break; case "green": echo "你喜欢的颜色是绿色!"; break; default: echo "你喜欢的颜色不是 红, 蓝, 或绿色!"; } ?>
PHP 循环结构
在 PHP 中,提供了下列循环语句:
- while - 只要指定的条件成立,则循环执行代码块
- do...while - 首先执行一次代码块,然后在指定的条件成立时重复这个循环
- for - 循环执行代码块指定的次数
- foreach - 根据数组中每个元素来循环代码块(专门遍历数组)
一 . while 循环
语法
语法结构: while (条件表达式) { 循环体; 循环条件变更; } $i = 1; while($i<=10){ echo '你好,明天<br/>'; $i++; }
二 . do .. while 语句
语法
do { 要执行的代码; 循环变更的条件 } while (条件); $i = 1; do{echo $i.'<br/>'; $i++; } while($i <10);
三 。 for 循环
for 循环用于您预先知道脚本需要运行的次数的情况。
语法
for (初始化条件表达式; 边界判定表达式; 条件变更表达式) { 循环体; }
实例 <?php for ($i=1; $i<=5; $i++) { echo "The number is " . $i . "<br>"; } ?>
四 。 foreach 循环
foreach 循环用于遍历数组。
语法
foreach ($array as $value) { 要执行代码; }
每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值。
实例 <?php $x=array("one","two","three"); foreach ($x as $value) { echo $value . "<br>"; } ?>
PHP 标签语法
标签语法 : 指当PHP 嵌入到 HTML 中时,让 php代码的结构更加符合 HTML 的规范而设定的语法结构
- 当分支或者循环的 { 出现时,使用冒号 : 代替
- 当分支或者循环的 } 出现时,使用相应的 end + 标记内容; 代替
<!DOCTYPE html> <html> <head> <title></title> </head> <body> //第一种方式(不推荐) <table> <?php for($i = 1;$i <= 9;$i++){ echo '<tr>'; for($j = 1;$j <= 9;$j++){ echo '<td>'; if($j <= $i){ echo "$i * $j = ".$i*$j; } echo '</td>'; } echo '</tr>'; } ?> </table> // 第二种方式 <table> <?php for($i=1;$i<=9;$i++):?> <tr> <?php for($j=1;$j<=$i;$j++):?> <td> <?php echo "$j * $i = " .$j*$i ;?> </td> <?php endfor;?> </tr> <?php endfor;?> </table> </body> </html>
PHP 函数
函数是通过调用函数来执行的。
语法
<?php
function functionName() {
// 要执行的代码
} ?>
PHP 函数准则:
- 函数的名称应该提示出它的功能
- 函数名称以字母或下划线开头(不能以数字开头)
## 如需让函数返回一个值,请使用 return 语句;
函数的形参 :
- 形参是在函数定义时指定的变量
- 形参的作用是在函数内部代替数据进行运算(占位符),形参数量可以根据需求来确定
- 形参的作用:允许内部数据产生变化(从而运算出不同的结果)
// 函数的形参 function demo($a = 2){ echo $a; } demo(); // 2 demo(3); // 3 demo($a =5); //5
函数的实参:
- 实参:指在调用函数时传递进去的实际数据
函数参数的默认值:(默认值是在定义函数时给形参设定的预计值)
- 调用时没有传递实参:使用默认值赋值给形参
- 调用时有传递参数:使用实参赋值给形参
参数传值方式:指实参传入到形参后,内部的改变是否对外部有影响
- 值传递:传递数值,内部修改不影响外部(所以外部只要是能得到数据的方式都可以做实参)
- 如 function a($b)
- 引用传递:传递数据的内存地址,内部修改影响外部(所以只能传递变量)
- 如 function a(&$b)
<?php //值传递 function demo01($value){ while($value>1){ echo $value--,'<br/>'; } } demo01(5); // 5 4 3 2 $value =5; demo01($value); echo $value; // 5 // 引用传递 function demo02(&$value){ while($value>1){ echo $value--,'<br/>'; } } //demo02(5); //demoo2单独传入值是不行的 $val = 5; demo02($val); // 5 4 3 2 echo $val; // 1 ?>
函数返回值: return
- 函数使用 return 返回内部结果;
- 默认函数最后会自动返回 null ;
- return 可以返回任意类型的数据。
- return 返回值是返回给函数调用处;
- return 一旦运行,之后的其他函数体就不会执行了
函数的规则
1. 函数命名规则:
- 函数名字由数字,字母和下划线组成,数字不能开头;
- PHP中函数名不区分大小写;
- PHP中函数名不能重复;
- 函数命名应当见名知意;
- 当函数有多个单词组成的时候,通常使用以下两种方式
- 驼峰法:第一个单词首字母小写,其他单词首字母大写(小驼峰);
- 下划线法:都小写,但是单词间使用下划线连接 (较多使用);
函数体规则
- 函数体主要是用来解决某个具体问题
- 函数体内基本不进行输出操作,如果有数据的话通常是通过返回值返回给调用处
- 函数操作通常只负责运算,不对结果负责(即结果交给调用处分析判定)
函数高级
1. 作用域
1.1 局部作用域(局部变量)
- 在函数内部定义的变量
- 局部变量只能在当前函数内部被访问
- 形参只能在局部作用域使用
1.2 全局作用域(全局变量)
- 即未在其他结构(函数)内部定义的作用域
- 全局变量:在全局作用域定义的变量;
- 全局变量只能在全局作用域访问;
- 全局变量可以当作实参使用;
- 全局变量不能在局部作用域访问,可以当作实参传递给函数内部使用
// 全局变量 $a = 100; // 全局变量当作实参传递给函数内部使用 function demo($a){ // $a 是函数内部的局部变量 echo $a; } demo($a); // 100 当前是在全局作用域使用
1.3 超全局作用域(超全局变量)
- 超全局变量:系统定义的预定义变量;
- 超全局变量不受作用域限制,都可以访问;
- 全局变量都会被收纳在 $GLOBALS中;
- 可以利用超全局变量来保存数据,让数据不受作用域限制;
- $GLOBALS 会自动包含全局变量,同时还有以下超全局变量;
- $_GET : 自动接收 GET 提交的数据;
- $_POST :自动接收 POST 提交的数据;
- $_COOKIE : 自动接收 cookie 数据;
- $_FILES :自动接收文件上传的数据;
- $GLOBALS : 自己包含自己;
// 超全局变量 $a = 100; function demo(){ echo '<pre>'; var_dump($GLOBALS); echo $GLOBALS['a']; } demo(); 输出: array(6) { ["_GET"]=> array(0) { } ["_POST"]=> array(0) { } ["_COOKIE"]=> array(0) { } ["_FILES"]=> array(0) { } ["GLOBALS"]=>array(6) { ["_GET"]=>array(0) { } ["_POST"]=>array(0) { } ["_COOKIE"]=>array(0) { } ["_FILES"]=>array(0) { } ["GLOBALS"]=>*RECURSION* ["a"]=>int(100) } ["a"]=>int(100) } 100
1.4 跨作用域访问
- 即在局部作用域访问全局变量,或者在全局作用域访问局部变量
- global 是局部作用域声明全局变量的关键字
- global 只能声明,不能赋值。
- 变量全局存在,内部需声明,就可以使用;也可以在内部声明一个全局变量,外部也可以访问;
1.5 静态变量
- 静态变量是在函数内部定义的,使用 static 修饰的局部变量
- static 修饰的变量是在函数编译(加载)时被初始化;
- static 修饰的变量行在函数调用时会跳过执行;
- 静态变量是保存在函数里面,所以每次调用时修改的值都可以被下次调用使用;
2. 静态变量的作用
- 让函数在多次调用时,能够共享内部数据变化;
- 普通局部变量每次调用都会初始化
#静态变量 function demo(){ $a = 1; static $b =1; echo $a++,$b++,'<br>'; } demo(); # 11 demo(); # 12
2. 强制类型;
1. 强类型参数
1. 强类型是在形参定义时指定数据类型;
- 规定实参必须传入相应类型;否则报错;
- 保护函数内部结构运行正确;
2. PHP是弱类型语言,会自动转换类型,一般可以不用
3. 不想在内部进行过多的逻辑判定,可以使用强类型参数。
# 强类型参数 function demo(float $a, float $b){ return $a+$b; } echo demo(1,"3"); // 4 php 会自动转换
2. 强类型返回值
3. 可变参数
1. 可变参数是指参数的数量可以不确定数量;
2. 形参中可以定义可变参数,吸收多余的实参变成数组;
3. 实参传递数据时,可以利用可变参数,将数据(如数组)结构成多个参数;
#可变参数 function demo01($a,$b,...$c){ $sum = $a + $b; var_dump($c); // $c 对应的数据类型为数组;相当于装包 foreach($c as $num){ $sum +=$num; } return $sum; } echo demo01(1,2,3,4,5); # array(3) { [0]=> int(3) [1]=> int(4) [2]=> int(5) } 15 function demo02($a,$b){ return $a + $b; } echo demo02(1,2); # 3 $arr = [1,2]; echo demo02(...$arr) # 3 相当于解包
4. 可变函数
1. 可变函数就是利用 变量 + ()来寻找匹配的函数名当做函数访问
2. 变量 + (): 系统自动理解为函数
# 可变函数 function demo(){ echo __FUNCTION__; echo "HELLO"; } # 定义变量 $fun = "demo"; # 可变函数(变量变函数) $fun() # demoHELLO
5 匿名函数
5.1 简单匿名函数
- 定义函数时函数没有名字
- 使用变量保存函数的内存地址
- 通过变量访问函数
- 匿名函数语法:
变量 = function(参数) {
函数体
return 返回值
} ; #注意:本质是给变量赋值,所以需要语句结束符
## 调用方式 : 变量(参数)
$demo = function($num){ echo $num; }; $demo('hello');
5.2 匿名函数闭包
闭包:是一个定义在函数内,能够读取其他函数内部变量的函数(闭包函数)
6. 系统函数
1. API文档查询
2. 常用的系统函数
字符串类:
- explode : 将字符串按照指定的符号分隔,得到一个数组
- implode : 将一个数组按照指定的符号连接成一个字符串
- str_replace : 字符串替换
- str_shuffle : 随机打乱一个字符串
- str_split :按照指定长度将字符串分隔成数组
- strlen : 获取字符串的长度(字节长度)
- substr : 从字符串中截取指定位置和长度的字符串
数组函数:
- array_key_exists : 判断下标是否在数组中存在
- array_keys : 获取数组全部下标,或某个确定值的下标
- array_merge : 合并数组元素(相同字符串下标元素是覆盖)
- array_pop : 从数组最后弹出一个元素(原数组元素减少)
- array_push : 从数组最后加入一个元素(原数组元素增加)
- array_unshift : 从数组最前面加入一个元素(原数组元素增加)
- array_shift : 从数组最前面弹出一个元素(原数组元素减少)
- shuffle : 将原始数组打乱
- in_array : 判断元素是否在数组中存在
- range : 生成一个规则数值数值
- current : 获取当前数组指针所在位置的值
- next : 将数组元素指针向后移动一位,并获取新元素的值
- prev : 与next相反,向前移动
- end : 指针移动到最后一个元素,并获取元素值
- reset : 重置数组指针(回到第一个元素)
7. 文件包含
php 提供了四种文件包含的方式:
1. include '文件名' ( include('文件名') )
2. require '文件名'
3. include_once '文件名'
4. require_once '文件名
# 1. 提前包含(向上包含):为了使用被包含文件中的数据或者结构
# 2. 最后包含(向下包含):为了将当前所有数据给被包含文件使用
1. 被包含文件通常是为了显示数据;
2. 可以不用管是什么格式,但是需要用php标签和语法来输出数据
## 附带三个文件 # 01 被包含文件01;用于输出数据 <?php $infos = [ 'name'=>'小芳', 'age' => 18, 'gender' =>'女' ]; # 02 被包含文件02,用于接收数据 <html> <head> <title>个人信息</title> </head> <body> 姓名:<?php echo $infos['name']?>, 年龄:<?php echo $infos['age']?>, 性别:<?php echo $infos['gender']?>, </body> </html> # 03 控制文件,用于访问 <?php include 'data.php'; // include 'data02.html'; (这种方式也可以) require_once 'data02.html'; ?>
文件包含的区别
分析:
1. include 和 require 的区别
- include 找不到文件报警告错误,不影响后续代码的继续执行
- require 找不到文件报致命错误,后续代码终止执行
2. 与 _once 的区别
- 没有 _once: 多次包含,系统会多次加载(如果有函数会报同名错误)
- 有 _once :只包含一次,系统包含后会记录当前被包含文件是否包含过(优点:安全; 缺点:效率低)