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}");
}
});