PHP中常见的错误和解决办法

1、PHP常见错误等级:Notice,Warning,Strict,Parse Error,Fatal Error
2、错误原理:


  • 通知级别(Notice):未定义,重复使用等(不会影响代码执行)

常见的Notice:未定义变量(常量),表单元素未定义(下标)

<?php
    //未定义变量
    // 解决方案:使用前定义
    echo $var;
    //未定义常量 
    echo PI;
    //数组元素下标未定义
    // 解决方案:在使用前进行判断,保证代码安全,增加代码容错性 if (isset($_POST['name'])) echo $_POST['name'];  
    echo $_POST['name'];


  • 警告级别(warning):系统找不到

常见的warning:包含文件不存在,默认时区,函数参数没有传入值

<?php
    // 包含文件,不影响后面输出hello world
    include_once 'fatalerror.php';
    echo "hello world";
    // 使用默认时区
    // 解决方案:修改默认时区为'PRC'
    echo data('Y-m-d',time());
    // 实参没有传值
    function display($value)
    {
        echo $name;
    }
    // 调用函数
    display();
  • 严格级别(strict):版本兼容(软件升级过程中不可避免的出现了迭代产品)

常见的strict:构造方法,类访问非静态方法

<?php
    // 解决方案:1,将老款放下面;2,不做兼容
    class GirlFriend{
    // 结构中所有的内容都是类成员
    function GirlFriend()
    {
        echo __METHOD__,'<br>';
    }
    // 构造方法
    function __construct()
    {
        // 资源初始化
        echo __METHOD__,'<br>';
    }

    // 实例化,构造方法兼容错误
    $g = new GirlFriend();

    // 类是可以访问类成员的:一般访问静态成员(static关键字修饰)和类常量(const)
    GirlFriend::display();

    // 解决方案:分清楚角色,静态成员和类常量都归类访问,普通的方法和属性都归对象访问
    $g::display();
}


  • 编译级别(parse error):语法错误

常见的parse:结构不完整,缺少语句结束符,关键字学错,定界符

<?php 
    // 结构不完整
    // 解决方案:注意代码的结构规范
    if (true)) {
        echo 'true';
    }
    function FunctionName(){

    }}

    // 缺少语句结束符
    // 缺少分号
    echo "helloworld"

    // 定界符,结束内容必须顶格
    // 第一个符号后面不能有任何内容,包括空格和注释
    $str=<<<END
        hello world
    END;


  • 致命级别(fotal error):结构错误(直接导致出错代码后面的代码不在执行)

常见的fotal:文件包含,使用未定义的结构(函数和类),访问私有成员,内存超出,时间过长(超过30s)
<?php
    // 文件包含,require,后面的hello不能输出
    // 解决方案,加载前进行文件判断if(file_exit('fatalerror.php')){require 'fatalerror.php';}
    require 'fatalerror.php';
    echo "hello";

    // 使用未定义结构
    // 解决方案:1确定定义的函数2自动加载
    display(); //直接调用未定义的函数

    $g = new GirlFriend();//未定义类

    // 私有成员访问
    // 解决方案:PHP重载
    class ClassName{
        private $age = 10;
        public $name = "hhh";
    }
    $g = new ClassName();
    echo $g->name;//公有可以访问
    echo $g->age;//fatal error 

    // 内存超出:服务器内存不够
    // 解决方案:优先查递归,有没有递归出口
    // 递归:必须有递归点和递归出口
    function dg(){
        echo "a";
        dg();
    }
    dg();

    // 执行时间过长,时间超过30S
    // 解决方案:加长PHP解决 set_time_limie(0);
    $arr = array();
    for ($i=0; $i < 100000; $i++) { 
        $arr[$i] = mt_rand(1,100000);
    }
    // 定义冒泡函数
    function bubble_sort($arr)
    {
        for ($i=0,$len = count($arr); $i < $len; $i++) { 
            for ($j=0; $j < $len-1; $j++) { 
                if ($arr[$i]>$arr[$j]) {
                    $temp = $arr[$i];
                    $arr[$i] = $arr[$j];
                    $arr[$j] = $temp;
                }
            }
        }
        return $arr;
    }
    bubble_sort($arr);

3、错误解决方案

a)主动解决问题
b)抑制问题
c)关闭问题
  • parse error(编译错误):
    在书写代码的过程中,保证代码的格式正确,注意书写格式
  • runtime error(运行错误):
    1,忽略式:notice warning strict 可以直接忽略
    2,解决bug
    3,错误抑制符@,不让错误出现
    4,开发阶段(解决所有错误),生成阶段(抑制所有错误)

     4.1为单独项目进行错误控制
       ini_set('error_reporting',E_ALL);//显示错有级别的错误
       ini_set('display_errors',1);//开发,把错误显示出来
       生产环境
        ini_set('error_reporting',E_ALL & ~E_NOTICE & E_STRICT & E_WARNING);
    
     4.2整个服务器错误控制:在php.ini中进行配置:
        error_reporting
        display_errors
    
  • 高性能的代码实现:
    1,结构简约
    2,利用短路运算(出现概率高的放前面)
    3,算法实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值