PHP 5.4の新機能
マスター
特徴
トレイトの導入によりクラスの内容が拡張され、クラスが何らかの形で多重継承を実現し、より柔軟になります
特性をインスタンス化できません
サンプルコード:
- trait Hello {
- public functionsayHello() {
- echo 'Hello ' . "n";
- }
- }
- trait World {
- public functionsayWorld() {
- echo 'World' . "n";
- }
- }
- class MyHelloWorld {
- use Hello, World;
- public functionsayExclamationMark() {
- echo '!' . "n";
- }
- }
- $o = new MyHelloWorld();
- $ o->sayHello();
- $o->sayWorld();
- $o->sayExclamationMark();
コードをコピー
特性の継承順序は次のとおりであることに注意してください:
現在のクラスのメンバーはトレイトのメソッドをオーバーライドし、トレイトは継承されたメソッドをオーバーライドします
同じクラスで複数のトレイトが使用されている場合、メソッドの競合が発生します。問題を解決するには代わりにキーワードを使用します 。
サンプルコード:
- trait A {
- public function smallTalk() {
- echo 'a';
- }
- public function bigTalk() {
- echo 'A';
- }
- }
- trait B {
- public function smallTalk() {
- echo 'b';
- }
- public function bigTalk() {
- echo 'B';
- }
- }
- class Talker {
- A, B を使用 {
- A;
- の代わりに B::smallTalk B の代わりに A ::bigTalk;
- }
- }
- class Aliased_Talker {
- A、B を使用します {
- A の代わりに B::smallTalk;
- B の代わりに A::bigTalk;
- B::bigTalk をトークとして使用します;
- }
- }
コードをコピー
新しい短い配列構文
$a = [1, 2, 3, 4];- $a = ['one' => 'two' => 、「4」 =>
-
-
コードをコピーします
関数によって返される配列のメンバーアクセス分析のサポートを追加しました
function foo()- {
- return array(1,3,4,5);
- }
- $var =foo()[0];
コードをコピーします
short_open_tag php.ini オプションが設定されているかどうかに関係なく、= は常に使用可能になります= 将总是可用
インスタンス化中のクラスメンバーへのアクセスを追加
class Test- {
- public function foo()
- {
- //todo
- return 1;
- }
- }
- $var = (new Test)->foo();
-
コードをコピー
追記: 括弧に注意してください
SESSION 拡張機能でファイルのアップロードの進行状況を追跡できるようになりました
php.ini で session.upload_progress.enabled = On を設定します
ファイルアップロードの進捗状況追跡機能がオンになります
max_input_vars ディレクティブ
php.ini ファイルで、max_input_vars の値を設定します。
$_GET、$_POST、$_COOKIE の最大長を制御します
サービス拒否攻撃のためのハッシュ衝突が構築される可能性を減らします
理解しました
クロージャーが $this をサポートするようになりました
Class::{expr}() 構文をサポートするようになりました
サンプルコード:
class Utils- {
- public static function test1()
- {
- echo 1;
- }
- public static function test2()
- {
- echo 2;
- }
- }
- $m = ' test';
- Utils::{$m . (10-8)}();
- Utils::test2(); コードをコピーします
- 新しいバイナリの直接数量、例: 0b001001101
PHP 5.5の新機能
マスター
opcache は php 配布パッケージに統合されています
opcache は実際には Zend 社の Zend Optimizer Plus であり、apc と同様の機能を備えています
apc よりもパフォーマンスが高く、opcode が最適化されており、opcache についての詳細情報
バード兄さんのブログへどうぞ
Zend O+ について少し共有します
したがって、PHP をインストールするときに、コンパイル パラメータを追加する必要があります。
- --enabled-opcache
- 推奨構成 (php.ini)
- zend_extension=opcache.so
- opcache.enable_cli=1
- opcache.memory_consumption=128 //共有メモリのサイズ、これはニーズに応じて調整できます
- opcache .interned_strings_buffer=8 //インターンされた文字列のメモリサイズも調整可能
- opcache.max_accelerated_files=4000 //キャッシュされたファイルの最大数
- opcache.revalidate_freq=60 //ファイルの更新を60秒ごとにチェック
- opcache.fast_shutdown=1 //開いてすぐに閉じます。PHPリクエストシャットダウンでこれを開くと、メモリ回復の速度が向上します
- opcache.save_comments=0 //ファイル/関数のコメントを保存しません
コードをコピーします
ジェネレーター
Python に慣れている学生は、必ずジェネレーターにも精通しているはずです
その機能は、関数内でキーワード yield を使用して関数の実行を中断し、foreach で使用できるイテレータを返すことです
この構文は PHP5.5 の最も魅力的な機能です
次のコードは、ジェネレーターの使用法を示し、ジェネレーターの利点を強調するために比較を行っています。
- ini_set('memory_limit', '512M');
- $cmd = isset($argv[1]) (int)$argv[1] : 0;
- function xrange($ start, $end, $step = 1)
- {
- if($start <= $end)
- {
- if($step <= 0)
- {
- throw new LogicException('step は +ve である必要があります') ;
- }
- for($i = $start; $i <= $end; $i = $i + $step)
- {
- yield $i;
- }
- }else{
- if($step >= 0)
- {
- throw new LogicException('step は -ve でなければなりません');
- }
- for($i = $start; $i >= $end; $i = $i + $step)
- {
- yield $i;
- }
- }
- }
-
- if($cmd == 0)
- {
- $r = range(1, 1000000);
- foreach($r as $v)
- {
- if($v > 20)
- {
- ブレーク;
- }
- echo "$vt";
- }
- $m =memory_get_usage(true);
- echo "n" . $m/1014/1024 ;
- }else if($ cmd == 1){
- $r = xrange(1, 1000000);
- foreach($r as $v)
- {
- if($v > 20)
- {
- Break;
- }
- echo "$vt" ;
- }
- $m =memory_get_usage(true);
- echo "n" . $m / 1014 /1024 . "Mn";
- }else{
- include 'php-excel.class.php';
- $stime = microtime (true);
- if($cmd == 3)
- {
- $data = array();
- for($i = 0; $i {
- $data[] = range( 1,100);
- }
- $xls = new Excel_XML();
- $xls->addWorksheet('test', $data);
- $xls->writeWorkbook('test.xls', './');
- }else{
- $data = function($n = 10000){
- for($i = 0; $i {
- yield xrange(1,100);
- }
- };
- $ xls = new Excel_XML();
- $xls->addWorksheet('test', $data());
- $xls->writeWorkbook('test.xls', './');
- }
- $ctime = microtime(true) - $stime;
- $m =memory_get_usage(true);
- echo "n" . $m / 1014 /1024 . "cost time:" .
- }
-
-
コードをコピー
追記: php-excel.class.php ファイルの内容については、この要点を参照してください
php-excel.php
新しいやっとキーワード
サンプルコード:
function getLines($file) - {
- $f = fopen($file, 'r');
- 試してみる
- {
- while ($line = fgets($f))
- {
- yield $line;
- }
- }finally {
- fclose($f);
- }
- }
- foreach(getLines('finally.php') as $v)
- {
- echo $v;
- }
Copyコード コードを書くときは、良い習慣を身につけ、オープンリソースをタイムリーにリリースする必要があります
パスワードAPI
パスワードシリーズ関数はパスワードを保存し、より簡単で安全な方法を実現します
パスワードストレージがプレーンテキストから md5、md5+salt、mcrpty+salt に変更されます
password_hash は、デフォルトで bcrypt 暗号化アルゴリズムを使用して、自動的にソルトを生成し、パスワードを暗号化します
サンプルコード
$pw1 = '123456';- $pwdb =password_hash($pw1, PASSWORD_DEFAULT);
- var_dump($pwdb) . "n";
- var_dump(password_verify($pw1, $pwdb) ) 。 "n";
- コードをコピー
-
新しいアプリケーション開発では、パスワードの保存に組み込みのパスワード シリーズ関数を使用することを強くお勧めします
配列列
この機能はずっと前からあったはずです
データベースから 10 個のレコードを取得します。これら 10 個のレコードの中から特定の列を取得したい場合、以前は foreach を使用するしかありませんでした。
これを行うには array_coulum 関数だけが必要です。この関数は実用上非常に重要なので、別途説明します
サンプルコード:
// データベースから返された可能なレコードセットを表す配列 $records = array( array( 'id' => 2135, 'first_name' => 'John', - 'last_name' => 'Doe',
- ),
- array(
- 'id' => 3245,
- 'first_name' => 'サリー',
- 'last_name' => 'スミス',
- ) ,
- array(
- 'id' => 5342,
- 'first_name' => 'Jane',
- 'last_name' => 'ジョーンズ',
- ),
- array(
- 'id' => 5623,
- 'first_name' => 'ピーター',
- 'last_name' => 'Doe',
- )
- );
- $first_names = array_column($records, 'first_name');
- print_r($first_names);
-
- コードをコピー
-
-
-
-
- おなじみ
foreach が list() をサポートするようになりました
$arr= array( array(1,2,3), array(1,2,3), array(1,2,3), ); foreach( $arr as list($a, $b, $c)) {- //todo
- }
-
-
-
- コードをコピー
-
-
- 走査される配列のサブ配列の数は同じである必要があることに注意してください
-
- empty() はあらゆる式をサポートしており、empty は関数呼び出しでも使用できます
理解しました
GDの改善
新しい imageflip() 関数を使用した反転のサポート
imagecrop() および imagecropauto() 関数を使用した高度なトリミングのサポート
WebP の読み取りと書き込みでは、それぞれ imagecreatefromwebp() と imagewebp() の使用がサポートされます。
さらに、PHP5.4 と PHP5.5 には、非常に多くの新しい関数、新しいクラス、新しいインターフェイス、新しいグローバル定数があります
もっと詳しく知りたい場合は、以下のリンクをチェックしてください
http://www.php.net/manual/zh/migration55.new-functions.php
http://www.php.net/manual/zh/migration55.classes.php
http://www.php.net/manual/zh/migration55.new-methods.php
http://www.php.net/manual/zh/migration55.global-constants.php
http://www.php.net/manual/zh/migration54.functions.php
http://www.php.net/manual/zh/migration54.classes.php
http://www.php.net/manual/zh/migration54.methods.php
http://www.php.net/manual/zh/migration54.global-constants.php
より高度な、新しい機能、PHP
|