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"; // 使用默認時區 // 解決方案:修改默認時區為'常見的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,算法實現
新聞熱點
疑難解答
圖片精選