PHP7.1的幾個新特性
阿新 • • 發佈:2020-12-29
1、try catch 支援捕獲多個異常
- #寫程式碼的時候不免要自定義異常,以前捕獲多個異常需要這樣寫
- try
- ...
- }catch(myException $e) {
- ...
- }catch(anotherExcpetion $e) {
- ...
- }catch(Exception $e) {
- ...
- }
- #php7.1可以這麼寫了
- try{
- ...
- }catch(myException | anotherException $e) {
- ...
- }catch(Exception $e) {
- ...
- }
1、class 支援常量的可見性設定
- #以前的類裡面的常量不可以設定可見性,例如
- class MyClass
- {
- protected $orderArr;
- private $key;
- const OUT_TIME = 1000; #這裡不能新增修飾
- }
- #現在你可以為const設定可見性了
- class MyClass
- {
- public $name
- protecte $orderArr;
- private $key;
- protected const OUT_TIME = 1000; #這裡可以設定可見性了
- }
3、多變數同時賦值
\(b = 2; \)c = 4;
或者相同值的你可以這樣寫
$a = $b = $c = [];
現在你可以這樣為不同值的多個變數賦值
[$a, $b, $c] = [1, 2, 3];
4、放棄mcrypt擴充套件
- #以前用mcrypt寫一個加密大概是這樣
- public function encryptData($str, $key)
- {
- $block = mcrypt_get_block_size('des', 'ecb');
- $pad = \(block - </span><span class="br0">(</span><span class="kw1">strlen</span><span class="br0">(</span><span class="">\)str) % $block);
- \(str .= </span><span class="kw1">str_repeat</span><span class="br0">(</span><span class="kw1">chr</span><span class="br0">(</span><span class="">\)pad), $pad);
- $res = mcrypt_encrypt(MCRYPT_DES, $key, \(str, MCRYPT_MODE_ECB</span><span class="br0">)</span><span class="">;</span></li><li class=" odd"><span class=""> return </span><span class="kw1">strtoupper</span><span class="br0">(</span><span class="kw1">bin2hex</span><span class="br0">(</span><span class="">\)res));
- }
- #現在你需要用openssl來替換了
- public function encryptData($str, $key)
- {
- \(res = </span><span class="kw1">openssl_encrypt</span><span class="br0">(</span><span class="">\)str, 'DES-ECB', \(key, OPENSSL_RAW_DATA</span><span class="br0">)</span><span class="">;</span></li><li class=" odd"><span class=""> return </span><span class="kw1">strtoupper</span><span class="br0">(</span><span class="kw1">bin2hex</span><span class="br0">(</span><span class="">\)res));
- }
- #以前用mcrypt寫一個解密大概是這樣
- public function decryptData($str, $key)
- {
- \(str = </span><span class="kw1">strtolower</span><span class="br0">(</span><span class="">\)str);
- $str = pack('H', $str);
- $decrypted = mcrypt_decrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);
- \(dec_s = </span><span class="kw1">strlen</span><span class="br0">(</span><span class="">\)decrypted);
- \(padding = </span><span class="kw1">ord</span><span class="br0">(</span><span class="">\)decrypted[$dec_s - 1]);
- \(decrypted = </span><span class="kw1">substr</span><span class="br0">(</span><span class="">\)decrypted, 0, -$padding);
- return \(decrypted;</span></li><li class=" even"><span class=""></span><span class="br0">}</span><span class=""></span></li><li class=" odd"><span class=""></span></li><li class=" even"><span class=""></span></li><li class=" odd"><span class=""></span><span class="co1">#現在也要用openssl替換了</span><span class=""></span></li><li class=" even"><span class=""></span></li><li class=" odd"><span class="">public function </span><span class="kw1">decryptData</span><span class="br0">(</span><span class="">\)str, $key)
- {
- \(str = </span><span class="kw1">strtolower</span><span class="br0">(</span><span class="">\)str);
- $str = pack('H', $str);
- \(decrypted = </span><span class="kw1">openssl_decrypt</span><span class="br0">(</span><span class="">\)str,'DES-ECB', $key,OPENSSL_RAW_DATA);
- return $decrypted;
- }
5、算術運算中警告無效的字串
- # 以前可以這樣
- \(num = </span><span class="nu0">1</span><span class=""> + </span><span class="st0">'abc323vccc'</span><span class="">; </span><span class="co1"> //result 1;</span><span class=""></span></li><li class=" odd"><span class="">\)num = 1 +'100abc'; //result 101;
- #現在你不能那樣寫了,將會得到這樣的一個警告
- PHP warning: A non-numeric value encountered on line 1
</div>