<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • php最新技術開發(phpstudy安裝及使用教程)


    1 系統函數引發TypeError和ValueError異常

    一.TypeError和ValueError改進作用
    #在PHP 8中,內部函數參數強制執行類型和值驗證,如果不允許使用預期的類型或值,則將拋出TypeError或ValueError異常錯誤.
    #在PHP 8之前,這會導致PHP警告.

    1.TypeError觸發條件
    提供的值是不是正確的類型.

    2.ValueError觸發條件
    如果提供的值是正確的類型,但PHP在上下文中不可接受,則PHP會引發ValueError異常.


    二.系統函數引發TypeError

    substr('foo', []);
    
    try{
    	substr('linux',[]);
    }catch(TypeError $e){
    	echo $e->getMessage();
    }


    三.系統函數引發ValueError

    json_decode('"foo"', true, -1);
    
    try{
    	json_decode('"foo"', true, -1);
    }catch(ValueError $e){
    	echo $e->getMessage();
    }


    四.自定義函數引發TypeError

    function show(string $name){
    	var_dump($name);
    }
    
    show([]);


    五.自定義函數引發ValueError

    function show(int $number){
    
    	if($number<10){
    		throw new ValueError('this value must be greater or equal 10');
    	}else{
    		echo $number;
    	}
    }
    
    show(5);
    
    #try捕捉
    function show(int $number){
    
    	if($number<10){
    		throw new ValueError('the number must be greater and equal 10');
    	}else{
    		echo $number;
    	}
    }
    
    try{
    	show(5);
    }catch(ValueError $e){
    	echo $e->getMessage();
    }

    2 Throw表達式拋出異常

    一.改進原因
    在PHP8前,不允許在單個表達式時引發異常,現在可以在箭頭函數、三元表達式等單個表達式的任何地方引發異常.


    二.箭頭函數使用
    //第1階段

    function show(){
    	return 123;
    }
    echo show();
    
    // 第2階段
    $fn=function(){
    	return 123;
    };
    echo $fn();
    
    //第3階段
    echo (function(){
    	return 123;
    })();
    
    // 第4階段
    $fn=fn()=>123;
    echo $fn();
    
    // 第5階段
    echo (fn()=>123)();


    三.箭頭函數+引發異常
    1.先定義后執行

    $fn=fn()=>throw new Exception('error');
    
    try{
    	$fn();
    }catch(Exception $e){
    	echo $e->getMessage();
    }

    2.定義并同時執行

    (fn() => throw new Exception('oops'))();


    四.三元表達式使用

    $name=false;
    $age=20;
    
    $r=$name ? $name : $age;
    $r=$name ?: $age;
    $r=$name ?? $age;
    
    var_dump($r);


    五.三元表達式+引發異常
    #前面為真則返回第二個值,否則返回第三個值

    $value = $name ? $name : throw new Exception('value not set');
    $value = $name ?: throw new Exception('value not set');

    #前面存在則返回第一個值,否則返回第二個值

    $value = $name ?? throw new Exception('value not set');

    3 無變量捕獲的Catch

    一.作用
    在catch讀法中不用必須寫$e變量


    二.語法

    try{
    	...
    }catch(Exception){
    	...
    }


    三.實例

    try{
    	(fn()=>throw new Exception('error'))();
    }catch(Exception){
    	echo 'Exception error!';
    }

    4 默認錯誤報告設置為E_ALL

    一.配置方法
    #php.ini

    error_reporting = E_ALL


    二.恢復舊設置
    #屏蔽已棄用錯誤、提示錯誤、語法嚴格性檢測

    E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE


    三.屏蔽所有錯誤

    display_errors = Off


    四.配置生效

    pkill -USR2 php-fpm

    5 默認情況下顯示PHP啟動錯誤

    #php.ini

    一.默認PHP啟動錯誤

    display_startup_errors = On


    二.測試PHP啟動錯誤
    1.制造啟動錯誤

    session.name=''

    2.啟動測試

    pkill php-fpm
    /usr/local/php/sbin/php-fpm


    三.屏蔽PHP啟動錯誤
    1.startup錯誤

    display_startup_errors = Off

    2.控制錯誤級別

    error_reporting = E_ALL & ~E_WARNING

    3.測試結果

    pkill php-fpm
    /usr/local/php/sbin/php-fpm

    4.商用建議關閉

    6 Assert斷言默認情況下引發異常

    一.Assert改進
    #php.ini默認開啟
    #assert(true === false);

    1.低版本下失敗的assert斷言會引發警告,但不會引發異常.(PHP5)

    assert.exception=On


    2.php8開始失敗的assert斷言會直接引發異常.(PHP7,PHP8)

    assert.exception=On


    二.Assert回調

    1.display_errors = Off
    2.assert.callback = assert_fail
    3.回調實驗

    assert(5<10);
    
    function assert_fail($file,$line,$assertion,$description){
    	echo $file;
    	echo '<br>';
    	echo $line;
    	echo '<br>';
    	echo $description;
    }

    7 操作符@不再抑制Fatal錯誤

    一.新版本中@不再抑制Fatal錯誤
    1.實例1

    @substr();

    2.實例2

    function load_files() {
        require_once 'file-that-does-not-exist.oops';
    }
    
    @load_files();

    3.在PHP 8.0中,該@運算符不會抑制在PHP 8.0之前已靜音的某些類型的錯誤

    E_ERROR -致命的運行時錯誤.
    E_CORE_ERROR -PHP的初始啟動中發生致命錯誤.
    E_COMPILE_ERROR -致命的編譯時錯誤.
    E_USER_ERROR-用戶觸發的trigger_error()功能錯誤.
    E_RECOVERABLE_ERROR -可捕獲的致命錯誤.
    E_PARSE -編譯時解析錯誤.

    4.E_USER_ERROR實例

    function do_something() {
        trigger_error('Something went wrong', E_USER_ERROR);
    }
    
    @do_something();

    8 PDO默認錯誤模式為ERRMODE_EXCEPTION

    一.創建sqlite3數據庫php8.db

    sqlite3 /sqlite3/php8.db


    二.sql基礎操作
    1.創建表user

    create table user(id integer PRIMARY KEY AUTOINCREMENT,name text,age integer);

    2.插入數據

    insert into user values(1,'user1',20);
    insert into user values(2,'user2',22);

    3.查詢數據

    select * from user;


    三.linux下查看數據庫文件(十六進制)

    xxd php8.db


    四.php pdo操作sqlite3 php8數據庫

    $pdo = new PDO('sqlite:/sqlite3/php8.db');


    五.pdo報錯類型PDO::ATTR_ERRMODE

    1.PDO::ERRMODE_SILENT 0
    2.PDO::ERRMODE_WARNING 1
    3.PDO::ERRMODE_EXCEPTION 2


    六.pdo設置錯誤類型
    1.設置

    $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);

    2.獲取

    $pdo->getAttribute(PDO::ATTR_ERRMODE);


    七.pdo操作user表

    $sql='select * from user2';
    $smt=$pdo->prepare($sql);
    $smt->execute();
    $arr=$smt->fetchAll(PDO::FETCH_ASSOC);


    八.pdo操作異常捕捉

    try{
    	$pdo=new PDO('sqlite:/sqlite3/php8.db');
    	$smt=$pdo->prepare('select * from user2');
    	$smt->execute();
    	$rows=$smt->fetchAll(PDO::FETCH_ASSOC);
    }catch(PDOException $e){
    	echo $e->getMessage();
    }

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费