[TOC]
做一個簡單的總結,沒有涵蓋全部改動,因為不常見。
# number_format()不會返回-0
因為-0這種寫法很古怪,所以number_format(-0.01),會返回0。
# 對數組強制轉成對象時,會將整形key轉成string
直接看代碼,
~~~
$a = [0 => 1]; $a = (object)$a; print_r($a->{0}); //或者 print_r($a->{'0'});
~~~
現在允許這么寫。但是key已經變成string類型,即’0’。
# 不可以對不能count的對象調用count函數
沒有實現Countable接口的對象都不能調用count函數,比如 count(1),count(‘a’) 在之前都會返回1,但是在7.2版本以后,會返回一個E_WARNING級別的錯誤,看一個例子:
~~~
class _count implements Countable{
public function count() {
return 10;
}
}
$count = new _count();
echo count($count); // 10
~~~
# 可以對__PHP_Incomplete_Class類型的對象調用is_object方法
__PHP_Incomplete_Class,這個東西就是有一個對象,php沒有找到定義它的地方,就會把該對象的類型變成這個,舉個例子:
~~~
$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';
print_r( unserialize($serialized_object) );
// __PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => a [value] => 100 )
在解序列化的時候很常見,可以用unserialize_callback_func選項去避免,舉個例子:
$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';
ini_set('unserialize_callback_func', 'mycallback'); // 設置回調
print_r( unserialize($serialized_object) );
function mycallback($classname)
{
require_once $classname.".php";
}
~~~
而在7,2版本對__PHP_Incomplete_Class對象調用is_object(),會返回true。
# 使用一個未定義的常量,會產生一個E_WARNING級別的錯誤。
~~~
echo NAME;
// Warning: Use of undefined constant NAME
~~~
# bcmod函數對于浮點數的操作
在之前,bcmod對于浮點數的運算類似于%操作符,但是在新版類似于fmod。
~~~
echo bcmod(4,3.5); // 之前會返回1,現在會返回1,5
~~~
# 對象返回類型聲明
如果參數類型聲明指定函數參數的預期類型,則返回類型聲明指定返回值的預期類型。
返回類型聲明指定了一個函數應該返回的變量的類型。
從PHP 7.2開始,我們被允許為對象數據類型使用返回類型聲明。這里是一個例子:
~~~
class MyClass {
public $var = 'Hello World';
}
$myclass = new MyClass;
function test(MyClass $arg) : object {
return $arg;
}
echo test($myclass)->var;
~~~
以前的PHP版本會導致以下致命錯誤:
Fatal error: Uncaught TypeError: Return value of test() must be an instance of object, instance of MyClass returned in /app/index.php:10
當然,在PHP 7.2中,這個代碼回應了“Hello World”。
# 參數類型加寬
PHP目前不允許子類和它們的父類或接口之間的參數類型有任何差異。這意味著什么?
考慮下面的代碼:
~~~
<?php
class MyClass {
public function myFunction(array $myarray) { /* ... */ }
}
class MyChildClass extends MyClass {
public function myFunction($myarray) { /* ... */ }
}
~~~
這里我們省略了子類中的參數類型。在PHP 7.0中,這段代碼會產生以下警告:
Warning: Declaration of MyChildClass::myFunction($myarray) should be compatible with MyClass::myFunction(array $myarray) in %s on line 8
自PHP 7.2以來,我們被允許在不破壞任何代碼的情況下省略子類中的類型。這個建議將允許我們升級類來在庫中使用類型提示,而不需要更新所有的子類。
# 在列表語法中尾隨逗號
數組中最后一項之后的尾隨逗號是PHP中的有效語法,有時為了方便追加新項目并避免由于缺少逗號而導致解析錯誤,鼓勵使用該語法。自PHP 7.2以來,我們被允許在分組命名空間中使用尾隨逗號。
請參閱列表語法中的尾隨逗號以便在此RFC處獲得更近的視圖以及一些代碼示例。
# 參數類型聲明
從PHP 5開始,我們可以在函數的聲明中指定期望傳遞的參數類型。如果給定的值是不正確的類型,那么PHP會拋出一個錯誤。參數類型聲明(也稱為類型提示)指定預期要傳遞給函數或類方法的變量的類型。
例如下面這個例子:
~~~
class MyClass {
public $var = 'Hello World';
}
$myclass = new MyClass;
function test(MyClass $myclass){
return $myclass->var;
}
echo test($myclass);
~~~
在這個代碼中,測試函數需要MyClass的一個實例。不正確的數據類型將導致以下致命錯誤:
Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of MyClass, string given, called in /app/index.php on line 12 and defined in /app/index.php:8
由于PHP 7.2 類型提示可以與對象數據類型一起使用,并且這種改進允許聲明通用對象作為函數或方法的參數。這里是一個例子:
~~~
class MyClass {
public $var = '';
}
class FirstChild extends MyClass {
public $var = 'My name is Jim';
}
class SecondChild extends MyClass {
public $var = 'My name is John';
}
$firstchild = new FirstChild;
$secondchild = new SecondChild;
function test(object $arg) {
return $arg->var;
}
echo test($firstchild);
echo test($secondchild);
~~~
在這個例子中,我們調用了兩次測試函數,每次調用都傳遞一個不同的對象。在以前的PHP版本中這是不可能的。
- OAuth
- 簡介
- 步驟
- 單點登錄
- .user.ini
- 時間轉換為今天昨天前天幾天前
- 獲取ip接口
- 協程
- 概念
- yield-from && return-values
- 協程與阻塞的思考
- 中間件
- mysqli異步與php的協程
- 代碼片段
- pdo 執行的sql語句
- 二進制安全
- 捕捉異常中斷
- global
- 利用cookie模擬登陸
- 解析非正常json
- 簡單的對稱加密算法
- RSA 加密
- 過濾掉emoji表情
- 判斷遠程圖片是否存在
- 一分鐘限制請求100次
- 文件處理
- 多文件上傳
- 顯示所有文件
- 文件下載和上面顯示所有文件配合
- 文件的刪除,統計,存數組等
- 圖片處理
- 簡介
- 驗證碼
- 圖片等比縮放
- 批量添加水印
- beanstalkd
- 安裝
- 使用
- RabbitMQ
- 簡介
- debain安裝
- centos安裝
- 常用方法
- 入門
- 工作隊列
- 訂閱,發布
- 路由
- 主題
- 遠程調用RPC
- 消息中間件的選型
- .htaccess
- isset、empty、if區別以及0、‘’、null
- php各版本
- php7.2 不向后兼容的改動
- php中的各種坑
- php7改變
- php慢日志
- 郵件
- PHPMailer實現發郵件
- 驗證郵件地址真實性
- 文件下載
- FastCgi 與 PHP-fpm 之間的關系
- openssl 加解密
- 反射
- 鉤子方法
- 查找插件
- opcode
- opcache使用
- opcache優化
- 分布式一致性hash算法
- 概念
- 哈希算法好壞的四個定義
- php實現
- java實現
- 數組
- jwt
- jwt簡介
- 單點登錄
- phpize
- GeoIP擴展
- php無法獲得https網頁內容的解決方案
- homestead運行的腳本
- Unicode和Utf-8轉換
- php優化
- kafka
- fpm配置
- configure配置詳解