首页 > 编程 > PHP > 正文

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

2019-11-08 00:48:47
字体:
来源:转载
供稿:网友

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,算法实现


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表