ホームページ  >  記事  >  バックエンド開発  >  PHP7の機能は何ですか

PHP7の機能は何ですか

零下一度
零下一度オリジナル
2017-06-23 14:25:041175ブラウズ
<h2>型宣言</h2> <p>コードを見れば一目瞭然です。 </p> <pre class="brush:php;toolbar:false">class person {     public function age(int $age) : string     {         return 'Age is ' . $age;     } }</pre> <h2>名前空間の一括宣言とキーワードの使用</h2> <p>非混合モード</p> <pre class="brush:php;toolbar:false">use Publishers\Packt\{ Book, Ebook, Video}; use function Publishers\Packt\{ getBook, saveBook }; use const Publishers\Packt\{ COUNT, KEY };</pre> <p>混合モード</p> <pre class="brush:php;toolbar:false">use Publishers\Packt\{     Book,     Ebook,     Video,     function getBook,     function saveBook,     const COUNT,     const KEY };</pre> <p>複合モード</p> <pre class="brush:php;toolbar:false">use Publishers\Packt\{     Paper\Book,     Electronic\Ebook,     Media\Video };</pre> <h2>匿名クラス</h2> <p>匿名クラスは宣言と同時に使用され、同じ機能を持ちます。他のクラス したがって、機能上の違いは、匿名クラスにはクラス名がないことです。構文は次のとおりです: </p> <pre class="brush:php;toolbar:false">new class(argument) { definition };</pre> <p><em>匿名クラスにはクラス名がありませんが、PHP 内部で、メモリ参照アドレス テーブル内でグローバルに一意の名前が割り当てられます。 </em></p> <pre class="brush:php;toolbar:false">$name = new class('You') {     public function __construct($name)     {         echo $name;     } };</pre> <p>匿名クラスは親クラスとそのメソッドを継承できます。 </p> <pre class="brush:php;toolbar:false">class Packt {     protected $number;     public function __construct()     {         echo 'parent construct';     }     public function getNumber() : float     {         return $this->number;     } } $number = new class(5) extends Packt {     public function __construct(float $number)     {         parent::__construct();         $this->number = $number;     } }; echo $number->getNumber();</pre> <p>匿名クラスはインターフェースを継承できます。 </p> <pre class="brush:php;toolbar:false">interface Publishers {     public function __construct(string name, string address);     public function getName();     public function getAddress(); } class packt {     protected $number;     protected $name;     protected $address;     public function ... } $info = new class('name', 'address') extends Packt implement Publishers {     public function __construct(string $name, string $address)     {         $this->name = $name;         $this->address = $address;     }     public function getName() : string     {         return $this->name;     }     public function getAddress() : string     {         return $this->address;     } } echo $info->getName() . ' ' . $info->getAddress();</pre> <p>匿名クラスはクラス内にネストできます。 </p> <pre class="brush:php;toolbar:false">class Math {     public $first_number = 10;     public $second_number = 10;     public function add() : float     {         return $this->first_number + $this->second_number;     }     public function mutiply_sum()     {         return new class() extends Math         {             public function mutiply(float $third_number) : float             {                 return $this->add() * $third_number;             }         };     } } $math = new Math(); echo $math->mutiply_sum()->mutiply(2);</pre> <h2>昔ながらのコンストラクターをやめましょう</h2> <p> PHP4 以降、コンストラクターはクラス名と一致する名前を付けることで自身をコンストラクターとして宣言できます。PHP7 では、この方法でコンストラクターを宣言することは引き続き使用できますが、そうではありません。非推奨の情報を出力します。 <code>非推奨: クラスと同じ名前のメソッドは、PHP の将来のバージョンではコンストラクターになりません。</code> には非推奨のコンストラクターがあり、PHP7 <code> __construct で推奨されます。 ()コード>。 <code>Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; Packt has a deprecated constructor in ...</code>,PHP7中推荐使用 <code>__construct()</code>。</code></p> <h2>throwable接口</h2> <p>从PHP7开始,程序中的fatal错误都可以被截获,PHP7提供了throwable接口,异常与错误都继承于这个接口。</p> <h2>Error</h2> <p>现在大多数的fatal错误情况会抛出一个error实例,类似于截获异常,error实例可以被try/catch截获。</p> <pre class="brush:php;toolbar:false">try {     ... } catch(Error $e) {     echo $e->getMessage(); }</pre> <p><em>一些错误情况只有error的子实例会被抛出,例如 TypeError、DivisionByZeroError、ParseError等。</em></p> <h2><=>操作符</h2> <p><code><=></code>操作符将<code>==</code>、<code><</code>、<code>></code>三个比较操作符打包在了一起,具体使用规则如下。</p> <blockquote><p>操作符两边相等时返回 0<br>操作符左边小于右边时返回 -1<br>操作符左边大于右边时返回 1</p></blockquote> <h2>null合并运算符</h2> <p><code>??</code> 合并运算符,在第一操作数存在时可被直接返回,否则返回第二操作数。</p> <pre class="brush:php;toolbar:false">$title = $post['title'] ?? NULL; $title = $post['title'] ?? $get['title'] ?? 'No title';</pre> <h2>uniform变量语法</h2> <pre class="brush:php;toolbar:false">$first = ['name' => 'second']; $second = 'two'; echo $$first['name']; echo ${Sfirst['name']}; // PHP7 ... echo $object->$methods['title']; echo $object->{$methods['title']}; // PHP7</pre> <p>主要是因为PHP7与之前版本PHP的解析方式不一样,在PHP7中加上花括号就可以啦,就像上边代码这样,否则会报错。</p> <h2>常量数组</h2> <p>从PHP5.6开始常量数组可以用<code>const</code>关键字来声明,在PHP7中常量数组可以通过<code>define</code></p>スロー可能なインターフェイス<h2></h2> PHP7 以降、プログラム内の致命的なエラーをインターセプトできるようになり、例外とエラーはこのインターフェイスから継承されます。 <p></p>エラー<h2></h2>現在、ほとんどの致命的なエラー条件は、インターセプトされた例外と同様に、エラー インスタンスを try/catch によってインターセプトできます。 <p></p> <pre class="brush:php;toolbar:false">const STORES = ['en', 'fr', 'ar']; // php5.6 define('STORES', ['en', 'fr', 'ar']); // php7</pre> <h2>一部のエラー状況では、TypeError、DivisionByZeroError、ParseError などのエラーのサブインスタンスのみがスローされます。 </h2> <p></p><=>演算子🎜🎜<code><=></code>演算子は、<code>==</code>、<code><</code>、<code> &gt となります。 ;</code>3 つの比較演算子がパッケージ化されています。具体的な使用規則は次のとおりです。 🎜<blockquote>🎜演算子の両辺が等しい場合は 0 を返します<br/>演算子の左辺が右辺より小さい場合は -1 を返します<br/>演算子の左辺が大きい場合は 1 を返します右側より🎜</blockquote>🎜null merge演算子🎜🎜< code>??</code> 結合演算子は、最初のオペランドが存在する場合は直接返すことができ、存在しない場合は 2 番目のオペランドを返します。 🎜<pre class="brush:php;toolbar:false">// php7之前 switch (true) { case &#39;value&#39;: # code... break; default: # code... break; default: # code... break; } // php7 switch (true) { case &#39;value&#39;: # code... break; default: # code... break; }</pre>🎜統一変数構文🎜<pre class="brush:php;toolbar:false">session_start([ &#39;cookie_lifetime&#39; => 3600,     'read_and_close' => true ]);🎜 主な理由は、PHP7 の解析方法が以前のバージョンの PHP とは異なるためです。PHP7 では、上記のコードと同様に中括弧を追加するだけで、そうでない場合はエラーが報告されます。 🎜🎜定数配列🎜🎜 PHP5.6 以降、定数配列は <code>const</code> キーワードを使用して宣言できます。PHP7 では、<code>define</code> 関数を使用して定数配列を初期化できます。 🎜<pre class="brush:php;toolbar:false">$result = unserialize($object, ['allowed_classes' => ['Book', 'Ebook']]);</pre>🎜switch のデフォルト値🎜🎜 PHP7 より前では、switch ステートメント内で複数のデフォルト値が許可されていました。PHP7 からはデフォルト値は 1 つだけになり、それ以外の場合は致命的なレベルのエラーが発生します。 🎜rrreee🎜 session_start 関数のオプション配列🎜🎜 PHP7 より前では、セッションを使用する場合、最初に session_start() 関数を呼び出す必要があります。この関数には、渡されるパラメーターがありません。セッション関連の設定はすべて php.ini にあります。 PHP7 以降、この関数を呼び出すときにパラメーター オプションの配列を渡すことができ、これらの設定情報は php.ini のセッション構成をオーバーライドします。 🎜rrreee🎜unserialize 関数はフィルターを導入します🎜🎜unserialize() はフィルター項目なしで任意のタイプのオブジェクトを逆シリアル化できますが、PHP7 では unserialize() にフィルターが導入され、デフォルトですべてのタイプのオブジェクトの逆シリアル化が許可されます。 🎜りー</code>

以上がPHP7の機能は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。