<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 首頁 > 電腦資訊 > 網站建設SEO

      PHP7新特性_PHP 常用教程

      作者:佚名   來源:本站   時間:2018-01-01  點擊:80次

             PHP(外文名:PHP Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言。

      PHP語法吸收了C語言、Java和Perl的特點,易于學習,使用廣泛,主要適用于Web開發領域。PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標準通用標記語言下的一個應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯后代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快的效果。

      標量類型聲明

      PHP 7 中的函數的形參類型聲明可以是標量了。在 PHP 5 中只能是類名、接口、array 或者 callable (PHP 5.4,即可以是函數,包括匿名函數),現在也可以使用 string、int、float和 bool 了。

      php // 強制模式 function sumOfInts(int ...$ints) {     return array_sum($ints); }  var_dump(sumOfInts(2, '3', 4.1));

      以上實例會輸出:

      int(9)

      需要注意的是上文提到的嚴格模式的問題在這里同樣適用:強制模式(默認,既強制類型轉換)下還是會對不符合預期的參數進行強制類型轉換,嚴格模式下則觸發 TypeError 的致命錯誤。


      返回值類型聲明

      PHP 7 增加了對返回類型聲明的支持。 類似于參數類型聲明,返回類型聲明指明了函數返回值的類型?捎玫念愋团c參數聲明中可用的類型相同。

      php  function arraysSum(array ...$arrays): array {     return array_map(function(array $array): int {         return array_sum($array);     }, $arrays); }  print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));

      以上實例會輸出:

      Array (     [0] => 6     [1] => 15     [2] => 24 )

      NULL 合并運算符

      由于日常使用中存在大量同時使用三元表達式和 isset()的情況,NULL 合并運算符使得變量存在且值不為NULL, 它就會返回自身的值,否則返回它的第二個操作數。

      實例如下:

      php // 如果 $_GET['user'] 不存在返回 'nobody',否則返回 $_GET['user'] 的值 $username = $_GET['user'] ?? 'nobody'; // 類似的三元運算符 $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; ?>

      太空船操作符(組合比較符)

      太空船操作符用于比較兩個表達式。當$a大于、等于或小于$b時它分別返回-1、0或1。

      實例如下:

      php // 整型 echo 1 <=> 1; // 0 echo 1 <=> 2; // -1 echo 2 <=> 1; // 1  // 浮點型 echo 1.5 <=> 1.5; // 0 echo 1.5 <=> 2.5; // -1 echo 2.5 <=> 1.5; // 1   // 字符串 echo "a" <=> "a"; // 0 echo "a" <=> "b"; // -1 echo "b" <=> "a"; // 1 ?>

      通過 define() 定義常量數組

      實例如下:

      php define('ANIMALS', [     'dog',     'cat',     'bird' ]);  echo ANIMALS[1]; // 輸出 "cat" ?>

      匿名類

      現在支持通過new class 來實例化一個匿名類,實例如下:

      php interface Logger {     public function log(string $msg); }  class Application {     private $logger;      public function getLogger(): Logger {          return $this->logger;     }      public function setLogger(Logger $logger) {          $this->logger = $logger;     } }  $app = new Application; $app->setLogger(new class implements Logger {     public function log(string $msg) {         echo $msg;     } });  var_dump($app->getLogger()); ?>

      以上實例會輸出:

      object(class@anonymous)#2 (0) { }

      Unicode codepoint 轉譯語法

      這接受一個以16進制形式的 Unicode codepoint,并打印出一個雙引號或heredoc包圍的 UTF-8 編碼格式的字符串。 可以接受任何有效的 codepoint,并且開頭的 0 是可以省略的。

      echo "\u{aa}"; echo "\u{0000aa}"; echo "\u{9999}";

      以上實例會輸出:

      ª ª (same as before but with optional leading 0's) 香

      Closure::call()

      Closure::call() 現在有著更好的性能,簡短干練的暫時綁定一個方法到對象上閉包并調用它。

      php class A {private $x = 1;}  // Pre PHP 7 代碼 $getXCB = function() {return $this->x;}; $getX = $getXCB->bindTo(new A, 'A'); // intermediate closure echo $getX();  // PHP 7+ 代碼 $getX = function() {return $this->x;}; echo $getX->call(new A);

      以上實例會輸出:

      1 1

      為unserialize()提供過濾

      這個特性旨在提供更安全的方式解包不可靠的數據。它通過白名單的方式來防止潛在的代碼注入。

      php  // 轉換對象為 __PHP_Incomplete_Class 對象 $data = unserialize($foo, ["allowed_classes" => false]);  // 轉換對象為 __PHP_Incomplete_Class 對象,除了 MyClass 和 MyClass2 $data = unserialize($foo, ["allowed_classes" => ["MyClass", "MyClass2"]);  // 默認接受所有類 $data = unserialize($foo, ["allowed_classes" => true]);

      IntlChar

      新增加的 IntlChar 類旨在暴露出更多的 ICU 功能。這個類自身定義了許多靜態方法用于操作多字符集的 unicode 字符。

      php printf('%x', IntlChar::CODEPOINT_MAX); echo IntlChar::charName('@'); var_dump(IntlChar::ispunct('!'));

      以上實例會輸出:

      10ffff COMMERCIAL AT bool(true)

      若要使用此類,請先安裝Intl擴展


      預期

      預期是向后兼用并增強之前的 assert() 的方法。 它使得在生產環境中啟用斷言為零成本,并且提供當斷言失敗時拋出特定異常的能力。

      php ini_set('assert.exception', 1);  class CustomError extends AssertionError {}  assert(false, new CustomError('Some error message')); ?>

      以上實例會輸出:

      Fatal error: Uncaught CustomError: Some error message

      use 加強

      從同一 namespace 導入的類、函數和常量現在可以通過單個 use 語句 一次性導入了。

      php  //  PHP 7 之前版本用法 use some\namespace\ClassA; use some\namespace\ClassB; use some\namespace\ClassC as C;  use function some\namespace\fn_a; use function some\namespace\fn_b; use function some\namespace\fn_c;  use const some\namespace\ConstA; use const some\namespace\ConstB; use const some\namespace\ConstC;  // PHP 7+ 用法 use some\namespace\{ClassA, ClassB, ClassC as C}; use function some\namespace\{fn_a, fn_b, fn_c}; use const some\namespace\{ConstA, ConstB, ConstC}; ?>


      Generator 加強

      增強了Generator的功能,這個可以實現很多先進的特性

      php php  function gen() {     yield 1;     yield 2;      yield from gen2(); }  function gen2() {     yield 3;     yield 4; }  foreach (gen() as $val) {     echo $val, PHP_EOL; }  ?>

      以上實例會輸出:

      1 2 3 4

      整除

      新增了整除函數 intdiv(),使用實例:

      php var_dump(intdiv(10, 3)); ?>

      以上實例會輸出:

      int(3)

      推薦游戲

      換一換
      日韩精品一区二区三区高清