PHP 7新特性-文法編

15729 ワード

1,PHP 5が発行されたときにASPプログラマーに好かれるように、PHPはasp_を用意しました.tagsはすべて将来このようなスタイルがないことを禁止され、PHPもこのようなスタイルの声明を支持しなくなった.
<script language="php">script>

2,PHP 4の文法スタイルの中のいくつかのものは、例えば構造関数の使い方で、新しいPHP 7の中で完全に捨てられます.PHP 7は、E_DEPRECATEDのエラーメッセージ.

class foo {

    //                   
    function foo() {
        echo 'I am the constructor';
    }
}
?>

3、define定義定数はスカラーだけでなく配列もサポートする

define('PHPXY', array(
    '  ',
    '    ',
    '     '
));

echo PHPXY[1]; //       “    ”
?>

4.比較の際のサポート<=>文字列、配列、整数


// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1


PHP   :          ,             

5.PHP 7では関数の強制パラメータタイプ指定がサポートされている
// Coercive mode
function sumOfInts(int ...$ints)
{
    return array_sum($ints);
}

var_dump(sumOfInts(2, '3', 4.1));

//      9,       ?——          

PHP   :function funcName(...   )  PHP5.6     。     PHP7     

6.戻りタイプも強制的に決めている
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]));

7.新しいcallメソッドを外部で呼び出し、より短い方法で匿名関数を対中に追加して呼び出しを完了する
class A {private $x = 1;}

// Pre PHP 7 code
$getXCB = function() {return $this->x;};
$getX = $getXCB->bindTo(new A, 'A'); // intermediate closure
echo $getX();

// PHP 7+ code
$getX = function() {return $this->x;};
echo $getX->call(new A);

8.メンバーメソッドでは、クラス・タイプを返す必要があることも指定できます.
class A {}
class B extends A {}

class C
{
    public function test() : A
    {
        return new A;
    }
}

class A {} class B extends A {}
class C { public function test() : A { return new A; } }
世界で最も悲惨なことはあなたが私の前であなたが私があなたを爱していることを知らないことではありません.あなたは七夕に部屋を開けて、私は新しい知識を勉強しています.私などのプログラム犬、独身犬にとって、新しい知識を勉強したり、逆転したりする唯一の努力です.富帥になって、早く白富美を迎えましょう.PHP 7の削除のいくつかの関数は私たちが必要です.PHPマニュアルでは、皆さんのアップグレードに特化して、PHP 7から削除された関数の説明と整理を行いました.これらの関数をプロジェクトで使用した場合は、プロジェクト全体を検索し、変更します.
9. call_user_method()   call_user_method_array() 10. mcrypt_generic_end() alias in favor of mcrypt_generic_deinit() 11.   mcrypt_ecb(), mcrypt_cbc(), mcrypt_cfb() and mcrypt_ofb()    mcrypt_decrypt()     MCRYPT_MODE_* 12.   datefmt_set_timezone_id()  IntlDateFormatter::setTimeZoneID()     datefmt_set_timezone()   IntlDateFormatter::setTimeZone() 13. set_magic_quotes_runtime()         magic_quotes_runtime() 14. set_socket_blocking()           stream_set_blocking() 15.   fast-cgi dl() 16.T1Lib     ,    :imagepsbbox(), imagepsencodefont(), imagepsextendedfont(), imagepsfreefont(), imagepsloadfont(), imagepsslantfont(), imagepstext() PHP       ,         : 17. ereg_*         18. mysql_*            PHP7    Mysql    ,   mysql_*      mysql       。   ,              mysql_*           ,       mysql     。 

PHP 7削除の拡張について見てみましょう.
  • ereg
  • mssql
  • mysql
  • sybase_ct代替処理とソリューション:
  • 一、マイクロソフトのsql serverデータベースに接続する場合は、PDOスキームを使用して規則を代行してください.
    二、mysqlシリーズ関数拡張を使用してデータベースに接続する場合は、より効率的なmysql_を採用してください.ndシリーズ関数.彼はもっと効率的だ
    三、もしあなたがeregシリーズを採用しているなら、できるだけ早く変更しましょう.
    四、sybase_ctは全面的にsybase*シリーズに変更しましょう
    その他:1、三元演算子にショートカットの書き方が追加されました
    $expr1=1;
    $expr2=2;
    //     
    $expr=$expr1?$expr1:$expr2  
    //     
    $expr=$expr1?:$expr2
    

    2、空の連結演算子(?)
        
    
    $param = $_GET['param'] ?? 1;
       :
    
    $param = isset($_GET['param']) ? $_GET['param'] : 1;

    3、宇宙船オペレータ(コンボ比較子)宇宙船オペレータは2つの式を比較するために使用される.bの場合、それぞれ-1、0または1を返す.比較の原則はPHPの従来の比較規則に従って行われる
    // Integers
    echo 1 <=> 1; // 0
    echo 1 <=> 2; // -1
    echo 2 <=> 1; // 1
    // Floats
    echo 1.5 <=> 1.5; // 0
    echo 1.5 <=> 2.5; // -1
    echo 2.5 <=> 1.5; // 1
    // Strings
    echo "a" <=> "a"; // 0
    echo "a" <=> "b"; // -1
    echo "b" <=> "a"; // 1
    

    4、Traits Traitsは、interfaceのように方法を定義するしか実現できないし、classのように単一に継承するしかない柔軟なコード再利用メカニズムを提供しています.実践の中でどのように使うかについては、深く考えなければならない.マジック定数はTRAIT
    trait SayWorld {  
            public function sayHello() {  
                    parent::sayHello();  
                    echo "World!
    "
    ; echo 'ID:' . $this->id . "
    "
    ; } } class Base { public function sayHello() { echo 'Hello '; } } class MyHelloWorld extends Base { private $id; public function __construct() { $this->id = 123456; } use SayWorld; } $o = new MyHelloWorld(); $o->sayHello(); /*will output: Hello World! ID:123456

    5、ネーミングスペースuseオペレータが関数と定数のインポートをサポートし始める
    namespace Name\Space {  
        const FOO = 42;  
        function f() { echo __FUNCTION__."
    "
    ; } } namespace { use const Name\Space\FOO; use function Name\Space\f; echo FOO."
    "
    ; f(); }