最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • PHP入门学习笔记四

    正文概述 转载于:掘金(陆小天)   2021-07-21   373

    一、php练习题

    1.1 求数组的和以及数据的平均值。

    代码如下:

    <?php
        $num = 0;
        $arr = 0;
        $arr = [1,3,4,3,2,1];
        foreach($arr as $key => $value) {
            $num+=$value;
        }
        echo '和是:'.$num.'<br/>';
        echo '平均值是:'.$num/count($arr).'<br/>';
    ?>  
    

    效果: PHP入门学习笔记四 可以使用number_format(数字,精确到小数点后几位)来格式化到小数点后面几位。 例:

    <?php
        $num = 0;
        $arr = 0;
        $arr = [1,3,4,3,2,1];
        foreach($arr as $key => $value) {
            $num+=$value;
        }
        echo '和是:'.$num.'<br/>';
        echo '平均值是:'.number_format($num/count($arr), 1).'<br/>';
    ?>  
    

    效果: PHP入门学习笔记四

    1.2 数组翻转。

    代码如下:

    <?php
        $arr=[1,2,3,4,5];
        for($i = 0, $j = count($arr)-1; $i < $j; $i++, $j--) {
            [$arr[$i], $arr[$j]] = [$arr[$j], $arr[$i]];
        }
        print_r($arr);
    ?>  
    

    效果: PHP入门学习笔记四

    1.3 遍历二维数组

    例:

    <?php
        $arr=[
            [1,2,3,4],
            [5,6,7,8]
        ];
        for($i=0; $i<count($arr); $i++) {
            for($j=0; $j<count($arr[$i]); $j++) {
                echo $arr[$i][$j], '&nbsp;';
            }
            echo '<br/>';
        }
    ?>  
    

    效果: PHP入门学习笔记四

    1.4 循环输出1-100。

    循环输出1-100,其中3的倍数输出A,5的倍数输出B,15的倍数输出C。 此题必须先判断能被15整除的数,因为如果先判断3的倍数那么将不会出现C,因为能被15整除的数都能被3整除。 例:

    <?php
        for($i=1; $i<=100; $i++) {
            if ($i%15 ==  0) {
                echo 'C&nbsp;';
            }
            elseif ($i%3 == 0) {
                echo 'A&nbsp;';
            }
            elseif ($i%5 == 0) {
                echo 'B&nbsp;';
            }
            else {
                echo $i.'&nbsp;';
            }
        }
    ?>  
    

    效果: PHP入门学习笔记四

    1.5 打印水仙花数

    例:

    <?php
        for($i=100; $i<=999; $i++) {
            $a = (int)($i/100); // 百位数
            $b = (int)($i%100/10); // 十位数
            $c = $i%10; // 个位数
            if ($i== pow($a, 3) + pow($b, 3) + pow($c, 3)) {
                echo $i, '<br/>';
            }
        }
        // pow(数值,数值指数)
    ?> 
    

    效果: PHP入门学习笔记四

    1.6 打印100以内的斐波那契数

    斐波那契数的原理:一个数等于前面两个数之和。

    <?php
        $num1=1;
        $num2=1;
        echo $num1, '&nbsp;', $num2, '&nbsp;';
        while (true) {
            $num3 = $num1 + $num2;
            if ($num3 > 100) {
                break;
            }
            echo $num3, '&nbsp;';
            $num1 = $num2;
            $num2 = $num3;
        }
    ?> 
    

    效果: PHP入门学习笔记四

    二、作用域

    2.1 全局变量

    在函数外面。 例如:

    <?php
        $num=10;
        function fun() {
            echo $num;
        }
        echo $num;
        fun();
    ?>  
    

    效果: PHP入门学习笔记四 报错了,函数内部不会去全局去找。如果我就要在函数里面去找全局变量,可以使用超全局变量

    2.2 局部变量

    在函数里面,默认情况下,函数内部是不会去访问函数外部的变量,不像js,js局部找不到就会去全局变量去找。

    2.3 超全局变量

    可以在函数内部和函数外部访问。超全局变量有如下: PHP入门学习笔记四 利用超全局变量修改:

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

    效果: PHP入门学习笔记四 可以利用$GLOBALS输出全局变量:

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

    效果: PHP入门学习笔记四 还可以如下关键字写法:

    <?php
        $num=10;
        function fun() {
            global $num; // 将全局变量的$num的地址保存到引入到函数内部。
            echo $num;
        }
        fun();
    ?>  
    

    效果: PHP入门学习笔记四

    2.4 常量没有作用域

    例:

    <?php
        define('PI', 3.14);
        function fun () {
            echo PI;
        }
        fun();
        echo '<hr/>';
        function fun1 () {
            define('NUM', 6.28);
        }
        fun1();
        echo NUM
    ?>  
    

    效果: PHP入门学习笔记四

    2.5 静态变量

    静态变量一般指的是静态局部变量,静态变量只初始化一次。 例:

    <?php
        function fun() {
            $num=10;
            $num++;
            echo $num, '<br/>';
        }
        fun();
        fun();
    ?>  
    

    效果: PHP入门学习笔记四 普遍局部变量,函数没调用一次就初始化一次,不会进行叠加。 采用静态局部变量(静态变量只初始化一次):

    <?php
        function fun() {
            static $num=10;
            $num++;
            echo $num, '<br/>';
        }
        fun();
        fun();
    ?>  
    

    效果: PHP入门学习笔记四 常量和静态变量的异同点:

    • 常量和静态变量都只初始化一次;
    • 常量初始化完成后不能改变值,静态变量初始化后可以改变值。
    • 常量没有作用域的区分,静态变量是局部作用域。

    2.6 匿名函数的use( )

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

    <?php
        $num=10;
        $fun = function () {
            echo $num;
        };
        $fun();
    ?> 
    

    效果: PHP入门学习笔记四 这个时候就可以使用ues(),将外部的变量给引入:

    <?php
        $num=10;
        $fun = function () use ($num) {
            echo $num;
        };
        $fun();
    ?>  
    

    效果: PHP入门学习笔记四

    2.7 总结在局部作用域中访问全局变量。

    1. 使用超全局变量;
    2. 使用$GLOBALS;
    3. 使用global;
    4. 匿名函数使用use( );

    三、递归

    函数自己调用自己。 例:

    <?php
        function fun($num) {
            echo $num,'&nbsp;';
            if ($num == 1) {
                return;
            }
            fun($num-1);
        }
        fun(10);
    ?>  
    

    效果: PHP入门学习笔记四 例从1加到100:

    <?php
        function fun($num) {        
            if ($num == 0) {
                return;
            }
            return $num + fun($num-1);
        }
        echo fun(100);
    ?>  
    

    效果: PHP入门学习笔记四 利用递归思想打印前10个斐波那契数:

    <?php
        function fun($num) {
            if ($num == 1 || $num == 2) {
                return 1;
            }
            else {
                return fun($num-1) + fun($num-2);
            }
        }
        for($i=1; $i<=10; $i++) {
            echo fun($i),'&nbsp;';
        }
    ?>  
    

    效果: PHP入门学习笔记四

    四、包含文件

    4.1 包含文件的方式

    1. require
    2. include

    require和include的异同点: require和include都可以包含多次,require一旦包含路径输错,底下就不会执行了。include即使路径发生错误,底下如果还有代码还会执行。 例: header.php代码如下:

    <h1>我是头部</h1>
    
    <?php
        require './header.php';
        require './header.php';
        include './header.php';
        include './header.php';
    
        echo 'aa';
    ?>  
    

    效果: PHP入门学习笔记四 然后我们故意输错require的路径:

    <?php
        require './header1.php';
    
        echo 'aa';
    ?>  
    

    效果: PHP入门学习笔记四 报错了,并且底下代码不执行了,接着我们改成include:

    <?php
        include './header1.php';
        echo 'aa';
    ?>  
    

    效果: PHP入门学习笔记四 给了一个警告,并且aa也打印出来了。

    4.2 包含文件的路径

    ./ 当前目录
    
    ../ 上一级目录
    

    如果不写./,那么受include_path影响,可以看下phpinfo中的信息: PHP入门学习笔记四 可以使用set_include_path()去设置路径。使用场景:如果包含文件的目录结构比较多,可以用set_include_path()去设置。set_include_path()用分号分隔。

    五、错误处理

    5.1 错误的级别

    1. notice:提示

    例:

    <?php
        echo $num;
    ?>  
    

    效果: PHP入门学习笔记四 2. warning:警告 例:

    <?php
        include('./bb.html');
    ?>  
    

    效果: PHP入门学习笔记四 3. fatal error:致命错误 例:

    <?php
        require('./bb.html');
    ?>  
    

    效果: PHP入门学习笔记四 notice和warning报错后会继续执行下面代码,error报错后会停止执行。

    5.2 错误的提示方法

    1. 显示在浏览器上
    2. 记录在日志中

    记录在日志中(在php.ini中配置也可以在函数中修改):

    1. error_reporting = E_ALL ( 报告所有的错误)

    PHP入门学习笔记四 2. display_errors = On (将错误显示在浏览器上) PHP入门学习笔记四 3. log_errors = On(将错误记录在日志中) PHP入门学习笔记四 4. error_log='地址'(错误日志保存的地址) PHP入门学习笔记四 在项目开发过程中有两个模式,开发模式,将错误显示在浏览器中就可以了。生产模式的话需要将错误保存在日志中,不能显示在浏览器中。 例:

    <?php
        $debug = true; // 假设为开发模式
        ini_set('error_reporting',E_ALL); // 设置php配置 所有的错误有报告
        if ($debug) { // 开发模式
            ini_set('display_errors','On'); // 错误显示在浏览器中
            ini_set('log_errors', 'Off');  // 不记录日志
        }
        else { // 生产模式
            ini_set('display_errors','Off'); // 错误不显示在浏览器中
            ini_set('log_errors', 'On');  // 记录日志
            ini_set('error_log', './err.log'); // 记录在当前目录下
        }
        // 测试
        echo $num;
    ?>   
    

    开发模式效果,显示在浏览器中: PHP入门学习笔记四 接下来我们修改为生产模式:

    <?php
        $debug = false; // 假设为开发模式
        ini_set('error_reporting',E_ALL); // 设置php配置 所有的错误有报告
        if ($debug) { // 开发模式
            ini_set('display_errors','On'); // 错误显示在浏览器中
            ini_set('log_errors', 'Off');  // 不记录日志
        }
        else { // 生产模式
            ini_set('display_errors','Off'); // 错误不显示在浏览器中
            ini_set('log_errors', 'On');  // 记录日志
            ini_set('error_log', './err.log'); // 记录在当前目录下
        }
        // 测试
        echo $num;
    ?>  
    

    开发模式下,浏览器效果看不到报错: PHP入门学习笔记四 那么我们打开demo.php所在的目录可以发现多了一个err.log,我们打开查看: PHP入门学习笔记四

    5.3 自定义错误处理方式

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

    <?php
        $age=-10;
        if ($age<0) {
            trigger_error('年龄不能小于0');
        }
    ?>  
    

    效果: PHP入门学习笔记四 默认触发了notice级别的错误。 改为warning级别的错误:

    <?php
        $age=-10;
        if ($age<0) {
            trigger_error('年龄不能小于0', E_USER_WARNING);
        }
    ?>  
    

    效果: PHP入门学习笔记四 类似的:E_USER_NOTICE,E_USER_WARNING,E_USER_ERROR

    5.4 自定义错误处理函数

    例:

    <?php
        function err() {
            echo '我是自定义错误处理函数';
        }
        set_error_handler('err'); // 注册错误处理函数
        echo $num; // 只要有错就会触发这个函数
    ?>  
    

    效果: PHP入门学习笔记四 自定义错误处理函数参数,规定四个参数,并且参数名规定了,$errno,$errstr,$errfile,$errline。 例:

    <?php
    /**
     * err 自定义错误处理函数
     * @param $errno int 错误类型
     * @param $errstr string 错误信息
     * @param $errfile string 文件地址
     * @param $errline int 错误行号
     */
        function err($errno, $errstr, $errfile, $errline) {
            switch($errno) {
                case E_NOTICE:
                case E_USER_NOTICE:
                    echo 'notice 错误<br/>';
                    break;
                case E_WARNING:
                case E_USER_WARNING:
                    echo 'warning 错误<br/>';
                    break;
                case E_ERROR:
                case E_USER_ERROR:
                    echo 'ERROR 错误<br/>';
                    break;
            }
            echo "错误信息:{$errstr}<br/>";
            echo "错误文件:{$errfile}<br/>";
            echo "错误行号:{$errline}<br/>";
        }
        set_error_handler('err'); // 注册自定义错误处理函数
        // 测试错误
        echo $num;
    ?>  
    

    效果: PHP入门学习笔记四

    六、文件夹操作

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

    <?php
        mkdir('./dir');
    

    效果: PHP入门学习笔记四

    <?php
        mkdir('./dir/aa');
    

    在dir文件下创建aa文件夹。dir文件夹必须存在,如果不存在就报错了。 那如果dir文件夹不存,我希望在./dir/aa这样写的时候连dir文件夹也一起创建了,就需要用到第三个参数递归创建。 例:

    <?php
        mkdir('./dir/aa/cc', 0777, true); // 递归创建
    

    效果: PHP入门学习笔记四

    6.2 删除文件夹(rmdir())

    例:

    <?php
        rmdir('./dir/aa/cc'); // 删除cc文件夹
    

    效果: PHP入门学习笔记四 例:

    <?php
        rmdir('./dir'); 
    

    效果: PHP入门学习笔记四 删除文件夹的必须为空才能删除,否则会报错。 php没有提供递归删除。

    6.3 重命名文件夹(rename(旧名字,新名字))

    例:

    <?php
        rename('./dir', './dic'); 
    

    效果: PHP入门学习笔记四

    6.4 是否是文件夹(is_dir())

    例:

    <?php
        echo is_dir('./dic') ? '是文件夹' : '不是文件夹'; 
    

    效果: PHP入门学习笔记四

    6.5 打开文件夹、读取文件夹,关闭文件夹

    1. 打开文件夹:

    opendir(),例:

    <?php
        var_dump(opendir('./'));
    

    效果: PHP入门学习笔记四 2. 读取文件夹: readdir(),例:

    <?php
        $folder = opendir('./');
        while ($f = readdir($folder)) { // 利用while进行一直读取,如果读完了就为空,循环就结束了。
            echo $f,'<br/>';
        }
    

    效果: PHP入门学习笔记四 首先出现一点和两点,这是php的特性,只要有读取文件夹就会出现这两个。 tips:解决乱码的问题,可以使用iconv(进去编码格式,出来编码格式,字符串)。 可以使用如下语法将 ... 去除掉:

    <?php
        $folder = opendir('./');
        while ($f = readdir($folder)) { // 利用while进行一直读取,如果读完了就为空,循环就结束了。
            if ($f=='.' || $f=='..') {
                continue;
            }
            echo $f,'<br/>';
        }
    

    效果: PHP入门学习笔记四 3. 关闭文件夹: closedir(),例:

    <?php
        $folder = opendir('./');
        while ($f = readdir($folder)) { // 利用while进行一直读取,如果读完了就为空,循环就结束了。
            if ($f=='.' || $f=='..') {
                continue;
            }
            echo $f,'<br/>';
        }
        closedir($folder);
    

    起源地下载网 » PHP入门学习笔记四

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元