1 作用域

1.1 变量作用域

1、全局变量:在函数外面

2、局部变量:在函数里面,默认情况下,函数内部是不会去访问函数外部的变量

3、超全局变量:可以在函数内部和函数外部访问

| $GLOBALS
|
| — |
| $_SERVER |
| $_GET |
| $_POST |
| $_FILES |
| $_COOKIE |
| $_SESSION |
| $_REQUEST |
| $_ENV |

global关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$num=10;
function fun() {
global $num; //将全局变量的$num的地址引入到函数内部 相当于$num=&GLOBALS['num']
echo $num; //10
$num=100;
}
fun();
echo '<br>';
echo $num; //100
-----------------------------------
<?php
$num=10;
function fun() {
global $num;
unset($num); //销毁的是引用,不是具体的值
}
fun();
echo $num; //10

小结:

1、$GLOBALS保存的是全局变量的所有的值

2、global用于创建一个全局变量的引用

💡 注意:常量没有作用域的概念

1.2 静态变量(static)

静态变量一般指的是静态局部变量。

静态变量只初始化一次

1.2.1 常量和静态变量的区别

1、常量和静态变量都是初始化一次

2、常量不能改变值,静态变量可以改变值

3、常量没有作用域,静态变量有作用域

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
function fun1() {
define('num',10);
}
function fun2() {
echo num; //10
}
fun1();
fun2();
------------------------------------------------------------
<?php
function fun1() {
static $num=10;
}
function fun2() {
echo $num; //Notice: Undefined variable: num 因为静态变量是有作用域的
}
fun1();
fun2();

1.3 匿名函数use()

默认情况下,函数内部不能访问函数外部的变量,但在匿名函数中,可以通过use将外部变量引入匿名函数中

1
2
3
4
5
6
<?php
$num=10;
$fun=function() use($num) { //将$num引入到匿名函数中
echo $num;
};
$fun(); //10

思考:如何在函数内部访问函数外部变量

1、使用超全局变量

2、$GLOBALS

3、global

4、use将函数外部变量引入到匿名函数内部

2 递归

函数内部自己调用自己

递归有两个元素,一个是递归点(从什么地方递归),第二递归出口

3 包含文件

3.1 包含文件的方式

1、require:包含多次

2、include:包含多次

3、require_once: 包含一次

4、include_once: 包含一次

💡 小结:

1、require遇到错误抛出error类别的错误,停止执行

2、include遇到错误抛出warning类型的错误,继续执行

3、require_once、include_once只能包含一次

4、HTML类型的包含页面中存在PHP代码,如果包含到PHP中是可以被执行的

5、包含文件相当于把包含文件中的代码拷贝到主文件中执行,魔术常量除外,魔术常量获取的是所在文件的信息。

6、包含在编译时不执行、运行时加载到内存、独立编译包含文件

3.2 包含文件的路径

1
2
./		当前目录
../ 上一级目录
1
2
require './head.html';   //在当前目录下查找
require 'head.html'; //受include_path配置影响

1559631648089.png

include_path的使用场景:

如果包含文件的目录结构比较复杂,比如:在c:\aa\bb\cc\dd中有多个文件需要包含,可以将包含的路径设置成include_path,这样包含就只要写文件名就可以了

1
2
3
4
<?php
set_include_path('c:\aa\bb\cc\dd');  //设置include_path
require 'head1.html';  //受include_path配置影响
require 'head2.html';

include_path可以设置多个,路径之间用分号隔开

1
set_include_path('c:\aa\bb\cc\dd;d:\\');

4 错误处理

4.1 错误的级别

  1. notice:提示
  2. warning:警告
  3. error:致命错误

notice和warning报错后继续执行,error报错后停止执行

4.2 错误的提示方法

方法一:显示在浏览器上

方法二:记录在日志中

4.3 与错误处理有关的配置

在php.ini中

1
2
3
4
5
1. error_reporting = E_ALL:报告所有的错误
2. display_errors = On:将错误显示在浏览器上
3. log_errors = On:将错误记录在日志中
4. error_log=’地址’:错误日志保存的地址

在项目开发过程中有两个模式,开发模式,运行模式

1
2
3
开发模式:错误显示在浏览器上,不要记录在日志中
运行模式:错误不显示在浏览器上,记录是日志中

5 文件编程

5.1 文件夹操作

1 、创建文件夹【mkdir(路径,权限,是否递归创建)

1
2
make:创建
directory:目录,文件夹

例题

1
2
3
4
5
<?php
//1、创建目录
//mkdir('./aa'); //创建aa文件夹
//mkdir('./aa/bb'); //在aa目录下创建bb(aa目录必须存在)
mkdir('./aa/bb/cc/dd',0777,true); //递归创建

小结:

1、0777表示是文件夹的权限,在Linux中会详细讲解

2、true表示递归创建,默认是false

2、删除文件夹【rmdir()】

1
2
3
//remove:移除

rmdir('./aa/bb/cc/dd'); //删除dd文件夹

提醒:

1
2
1、删除的文件夹必须是空的
2、PHP基于安全考虑,没有提供递归删除。

3、重命名文件夹【rename(旧名字,新名字)】

1
rename('./aa','./aaa'); //将aa改为aaa

4、是否是文件夹【is_dir()】

1
echo is_dir('./aaa')?'是文件夹':'不是文件夹';

5、打开文件夹、读取文件夹、关闭文件夹

1
2
3
4
5
6
7
8
$folder=opendir('./');  //打开目录
//var_dump($folder); //resource(3) of type (stream)
while($f=readdir($folder)){ //读取文件夹
if($f=='.' || $f=='..')
continue;
echo iconv('gbk','utf-8',$f),'<br>';  //将gbk转成utf-8
}
closedir($folder); //关闭文件夹

小结:

1
2
3
1opendir()返回资源类型
2、每个文件夹中都有.和..
3iconv()用来做字符编码转换

本站由 RuntimeBroker 使用 Stellar 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本"页面"访问 次 | 👀总访问 次 | 总访客