PHP7新特性
- 特性一:
$a = array(1,2,3);
foreach($a as $v){
var_dump(current($a);
}
$a = array(1,2,3);
$b = $a;
foreach($a as $v){
var_dump(current($a));
}
$a = array(1,2,3);
$b = &$a;
foreach($a as $v){
var_dump(current($a));
}
- 特性二,新操作符 <=>,比較兩個值得大小
$a <=> $b;
- 異常捕獲 Throwable
try {
$a = new A();
} catch (Throwable $e) {
print_r($e);
echo $e->getLine() . PHP_EOL;
echo $e->getFile() . PHP_EOL;
echo $e->getMessage();
}
// 輸出
Error Object
(
[message:protected] => Class 'A' not found
[string:Error:private] =>
[code:protected] => 0
[file:protected] => /Users/fym/Documents/code/php/miaosha/test.php
[line:protected] => 4
[trace:Error:private] => Array
(
)
[previous:Error:private] =>
)
4
/Users/fym/Documents/code/php/miaosha/test.php
Class 'A' not found
- register_shutdown_function() 註冊終止函數
- 註冊終止函數, 在程序執行完畢, 發生異常退出時會執行這裏註冊的函數。
class Test
{
function abort() {
echo '這是終止方法' . PHP_EOL;
if(error_get_last()) {
// error_log('1232');
print_r(error_get_last());
}
echo 'abort after' . PHP_EOL;
}
}
function abort() {
echo '這是終止函數' . PHP_EOL;
}
// 註冊函數
register_shutdown_function('abort');
// 註冊類的方法
register_shutdown_function([new Test, 'abort']);
$a = new A();
echo 'hello world' . PHP_EOL;
- spl_autoload_register() 類的自動加載,php5.3就有了
- 先使用該函數註冊加載方法,該方法會傳入類名
- 當程序中使用沒有導入的類時,php會自動調用註冊的方法加載類
- 當使用use引入的類時, 類名就是use後面的路徑,導入文件時需要把反斜槓轉換爲斜槓。
- 可以多次調用該函數註冊多個加載器,多個加載器會依次執行,知道找到類文件,否則觸發報錯機制
- 自定義拋出的異常可以使用try-catch捕獲, 如果不自定義異常,系統拋出的異常則不能被捕獲。
define('ROOT_PATH', './');
spl_autoload_register(function($class_name){
$path = ROOT_PATH . $class_name . '.php';
if(is_file($path)) {
require $path;
} else {
throw new Exception("class name not found: {$class_name}");
}
});