1. 程式人生 > 實用技巧 >PHP7.1的幾個新特性

PHP7.1的幾個新特性

1、try catch 支援捕獲多個異常

  1. #寫程式碼的時候不免要自定義異常,以前捕獲多個異常需要這樣寫
  2. try
    {
  3. ...
  4. }catch(myException $e) {
  5. ...
  6. }catch(anotherExcpetion $e) {
  7. ...
  8. }catch(Exception $e) {
  9. ...
  10. }
  11. #php7.1可以這麼寫了
  12. try{
  13. ...
  14. }catch(myException | anotherException $e) {
  15. ...
  16. }catch(Exception $e) {
  17. ...
  18. }
#寫程式碼的時候不免要自定義異常,以前捕獲多個異常需要這樣寫
try{
...
}catch(myException $e) {
...
}catch(anotherExcpetion $e) {
...
}catch(Exception $e) {
...
}

php7.1可以這麼寫了

try{
...
}catch(myException | anotherException $e) {
...
}catch(Exception $e) {
...
}

1、class 支援常量的可見性設定

  1. #以前的類裡面的常量不可以設定可見性,例如
  2. class MyClass
  3. {
  4. protected $orderArr;
  5. private $key;
  6. const OUT_TIME = 1000; #這裡不能新增修飾
  7. }
  8. #現在你可以為const設定可見性了
  9. class MyClass
  10. {
  11. public $name
  12. protecte $orderArr;
  13. private $key;
  14. protected const OUT_TIME = 1000; #這裡可以設定可見性了
  15. }
#以前的類裡面的常量不可以設定可見性,例如
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、多變數同時賦值

4、放棄mcrypt擴充套件

  1. #以前用mcrypt寫一個加密大概是這樣
  2. public function encryptData($str, $key)
  3. {
  4. $block = mcrypt_get_block_size('des', 'ecb');
  5. $pad = \(block - </span><span class="br0">(</span><span class="kw1">strlen</span><span class="br0">(</span><span class="">\)str) % $block);
  6. \(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);
  7. $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));
  8. }
  9. #現在你需要用openssl來替換了
  10. public function encryptData($str, $key)
  11. {
  12. \(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));
  13. }
  14. #以前用mcrypt寫一個解密大概是這樣
  15. public function decryptData($str, $key)
  16. {
  17. \(str = </span><span class="kw1">strtolower</span><span class="br0">(</span><span class="">\)str);
  18. $str = pack('H', $str);
  19. $decrypted = mcrypt_decrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);
  20. \(dec_s = </span><span class="kw1">strlen</span><span class="br0">(</span><span class="">\)decrypted);
  21. \(padding = </span><span class="kw1">ord</span><span class="br0">(</span><span class="">\)decrypted[$dec_s - 1]);
  22. \(decrypted = </span><span class="kw1">substr</span><span class="br0">(</span><span class="">\)decrypted, 0, -$padding);
  23. 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)
  24. {
  25. \(str = </span><span class="kw1">strtolower</span><span class="br0">(</span><span class="">\)str);
  26. $str = pack('H', $str);
  27. \(decrypted = </span><span class="kw1">openssl_decrypt</span><span class="br0">(</span><span class="">\)str,'DES-ECB', $key,OPENSSL_RAW_DATA);
  28. return $decrypted;
  29. }
#以前用mcrypt寫一個加密大概是這樣

public function encryptData($str, $key)
{
$block = mcrypt_get_block_size('des', 'ecb');
$pad = \(block - (strlen(\)str) % $block);
\(str .= str_repeat(chr(\)pad), $pad);
$res = mcrypt_encrypt(MCRYPT_DES, $key, \(str, MCRYPT_MODE_ECB); return strtoupper(bin2hex(\)res));
}

現在你需要用openssl來替換了

public function encryptData($str, $key)
{
\(res = openssl_encrypt(\)str, 'DES-ECB', \(key, OPENSSL_RAW_DATA); return strtoupper(bin2hex(\)res));
}

以前用mcrypt寫一個解密大概是這樣

public function decryptData($str, $key)
{
\(str = strtolower(\)str);
$str = pack('H*', $str);
$decrypted = mcrypt_decrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);
\(dec_s = strlen(\)decrypted);
\(padding = ord(\)decrypted[$dec_s - 1]);
\(decrypted = substr(\)decrypted, 0, -$padding);
return $decrypted;
}

現在也要用openssl替換了

public function decryptData($str, $key)
{
\(str = strtolower(\)str);
$str = pack('H*', $str);
\(decrypted = openssl_decrypt(\)str,'DES-ECB', $key,OPENSSL_RAW_DATA);
return $decrypted;
}

5、算術運算中警告無效的字串

  1. # 以前可以這樣
  2. \(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;
  3. #現在你不能那樣寫了,將會得到這樣的一個警告
  4. PHP warning: A non-numeric value encountered on line 1
# 以前可以這樣
\(num = 1 + 'abc323vccc'; //result 1; \)num = 1 +'100abc'; //result 101;

現在你不能那樣寫了,將會得到這樣的一個警告

PHP warning: A non-numeric value encountered on line 1

						</div>