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