PHP作用域 递归 包含文件 错误处理 文件变成汇总

1.2 作用域

​ 1.2.1 变量作用域

​ 1、局部变量:在函数外面

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

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

<?php
$_POST['num']=10;
function fun(){
    echo $_POST['num'];
}
fun();
?>
<?php
$num=10;
function fun(){
    echo $GLOBALS['num'];
}
fun();

global关键字

小结:

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

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

注意:

​ 常量没有作用域的概念

1.2.1 静态变量(static)

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

​ 静态变量只初始化一次。

常量和静态变量的区别

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

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

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

1.2.3 匿名函数use()

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

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

​ 1、使用超全局变量

​ 2、$GLOBALS

​ 3、global

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

1.3 递归

函数内部自己调用自己

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

<?php
    function printer($num){
    echo $num.'&nbsp;';
    if($num==1) //递归出口
        return;
    printer($num-1);    //递归点
    
}
printer(9);     //9 8 7 6 5 4 3 2 1

小结:尽量少用递归,因为递归需要用到现场保护,现场保护是需要消耗资源的。

1.4 包含文件

​ 1.4.1 包含文件的方式

​ 1、require:包含多次

​ 2、include:包含多次

​ 3、require_once:包含一次

​ 4、include_once:包含一次

<?php
    include './head.html';      //包含文件
        include_once './head.html';

小结:

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

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

3、require_once、include_once只能包含一次

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

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

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

1.4.2 包含文件的路径

1.5.1 错误的处理级别

​ 1、notice:提示

​ 2、warning:警告

​ 3、error:致命错误

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

1.5.2 错误的提示方法

​ 方法一:显示在浏览器上

​ 方法二:记录在日志中

1.5.3 与错误处理有关的配置

在php.ini中

1.5.4 自定义错误处理(了解)

通过trigger_error产生一个用户级别的error/warning/notice信息

注意:用户级别的错误的常量名中一定带有USER。

定义错误处理函数

function error(){
    echo '这是自定义错误处理';
}
set_error_handle('error');      //注册错误处理函数,只要有错误就会自动的调用错误处理函数
echo $num;

1.6 文件变编程

​ 1、创建文件夹

​ mkdir:创建

<?php
    //1、创建目录
    //mkdir('./aa/bb');
    mkdir('./aa/bb/cc/dd',0777,true);   //递归创建

​ 2、删除文件夹

​ rmdir()

提醒:

删除的文件夹必须是空的

PHP基于安全考虑,没有提供递归删除

​ 3、重命名文件夹 rename()

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

​ 4、是否是文件夹 is_dir()

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

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

$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
}

for(::){
    if($f=readdir($folder)){
        if($f=='.' || $f=='..')
            continue;
        echo iconv('gbk','utf-8',$f),'<br>';      //将gbk转换为utf-8
    }else{
        break;
    }
}
closedir($folder);      //关闭文件夹

小结:

1、opendir()返回资源类型

2、每个文件夹中都有.和..

3、iconv()用来做字符编码转换