>백엔드 개발 >PHP7 >PHP5.X에서 PHP7.1.x로 기능 통합

PHP5.X에서 PHP7.1.x로 기능 통합

coldplay.xixi
coldplay.xixi앞으로
2021-01-20 09:47:511677검색

PHP5.X에서 PHP7.1.x로 기능 통합

추천(무료): PHP7

좋은 기능과 좋은 방법이 너무 많은데 꼭 써보시는 건 어떨까요? PHP가 점점 더 좋아지길 바랍니다.
PHP 5.1, PHP5.2, PHP5.3, PHP5.4, PHP5.5, PHP5.6, PHP7, PHP7.1의 모든 새로운 기능이 여기에 정리되어 누구나 배우고 사용할 수 있습니다

Buid- 웹 서버에는 간단한 웹 서버가 내장되어 있습니다

현재 디렉터리를 루트 문서로 사용하려면 다음 명령만 필요합니다.

php -S localhost:3300

다른 경로를 지정할 수도 있습니다

php -S localhost:3300 -t /path/to/root

라우팅도 지정할 수 있습니다

php -S localhost:3300 router.php

네임스페이스(php5.3)

네임스페이스의 구분 기호는 백슬래시입니다

namespace fox\lanmps\Table;    
class Select {}

전체 카테고리 이름 가져오기

네임스페이스 별칭 클래스 및 네임스페이스 단축 버전의 기능은 PHP5.3에서 도입되었습니다. 문자열 클래스 이름에는 적용되지 않지만

use Some\Deeply\Nested\Namespace\FooBar;    
// does not work, because this will try to use the global `FooBar` class    $reflection = new ReflectionClass('FooBar');   
echo FooBar::class;

이 문제를 해결하려면 클래스의 전체 클래스 이름을 반환하는 새로운 FooBar::class 구문을 채택하세요

네임스페이스 사용 연산자가 함수와 상수 가져오기를 지원하기 시작합니다.

namespace Name\Space {  
    const FOO = 42;  
    function f() { echo __FUNCTION__."\n"; }  
}  
namespace {  
    use const Name\Space\FOO;  
    use function Name\Space\f;  

    echo FOO."\n";  
    f();  
}

Output
42
NameSpacef

그룹 사용 선언

이제 동일한 네임스페이스에서 가져온 클래스, 함수 및 상수를 단일 use 문으로 한 번에 가져올 수 있습니다.

//PHP7之前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;// PHP7之后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};

지연된 정적 바인딩 지원

지연된 정적 바인딩을 구현하는 현재 클래스를 참조하는 정적 키워드

class A {    
    public static function who() {    
        echo __CLASS__;    
    }    
    public static function test() {    
        static::who(); // 这里实现了延迟的静态绑定    
    }    
}    
class B extends A {    
    public static function who() {    
         echo __CLASS__;    
    }    
}
B::test();

출력 결과:
B

goto 문 지원

대부분의 컴퓨터 프로그래밍 언어에서 모두 무조건 지원 점프 문 goto. 프로그램이 goto 문을 실행할 때 goto 문에 표시된 프로그램 위치로 이동하여 실행을 계속합니다. goto 문은 프로그램 흐름을 불분명하게 하고 가독성을 떨어뜨릴 수 있지만 깊게 중첩된 루프 및 if 문을 중단하는 등 특정 상황에서는 고유한 편의성을 제공합니다.

goto a;    
echo 'Foo';    
a:    
echo 'Bar';    
for($i=0,$j=50; $i<100; $i++) {    
  while($j--) {    
    if($j==17) goto end;    
  }     
}    
echo "i = $i";    
end:    
echo &#39;j hit 17&#39;;

클로저, 람다/익명 함수 지원

클로저(Closure) 함수와 람다 함수의 개념은 함수형 프로그래밍 분야에서 나왔습니다. 예를 들어 JavaScript는 클로저 및 람다 기능을 지원하는 가장 일반적인 언어 중 하나입니다.
PHP에서는 create_function()을 통해 코드가 실행되는 동안 함수를 생성할 수도 있습니다. 하지만 문제가 있습니다. 생성된 함수는 런타임에만 컴파일되며 다른 코드와 동시에 실행 가능한 코드로 컴파일되지 않습니다. 따라서 코드 실행 효율성을 높이기 위해 APC와 같은 실행 가능한 코드 캐시를 사용할 수 없습니다.
PHP5.3에서는 Lambda/익명 함수를 사용하여 일부 임시(사용 및 폐기) 함수를 array_map()/array_walk() 및 기타 함수에 대한 콜백 함수로 정의할 수 있습니다.

echo preg_replace_callback(&#39;~-([a-z])~&#39;, function ($match) {    
    return strtoupper($match[1]);    
}, &#39;hello-world&#39;);    
// 输出 helloWorld    $greet = function($name)    {    
    printf("Hello %s\r\n", $name);    
};    
$greet(&#39;World&#39;);    
$greet(&#39;PHP&#39;);    
//...在某个类中    $callback =      function ($quantity, $product) use ($tax, &$total)         {    
   $pricePerItem = constant(__CLASS__ . "::PRICE_" .  strtoupper($product));    
   $total += ($pricePerItem * $quantity) * ($tax + 1.0);    
 };

매직 메소드 __callStatic() 및 __invoke()

PHP에는 원래 매직 메소드 __call()이 있습니다. 이 매직 메소드는 코드가 객체의 존재하지 않는 메소드를 호출할 때 자동으로 호출됩니다. 새로운 __callStatic() 메서드는 정적 클래스 메서드에만 사용됩니다. 클래스에 존재하지 않는 정적 메서드를 호출하려고 하면 __callStatic() 매직 메서드가 자동으로 호출됩니다.

class MethodTest {    
    public function __call($name, $arguments) {    
        // 参数 $name 大小写敏感    
        echo "调用对象方法 &#39;$name&#39; "    
             . implode(&#39; -- &#39;, $arguments). "\n";    
    }    
    /**  PHP 5.3.0 以上版本中本类方法有效  */    
    public static function __callStatic($name, $arguments) {    
        // 参数 $name 大小写敏感    
        echo "调用静态方法 &#39;$name&#39; "    
             . implode(&#39; -- &#39;, $arguments). "\n";    
    }    
}    

$obj = new MethodTest;    
$obj->runTest(&#39;通过对象调用&#39;);    
MethodTest::runTest(&#39;静态调用&#39;);  // As of PHP 5.3.0

위 코드 실행 후의 출력은 다음과 같습니다.
객체 메소드 'runTest' 호출 – – 객체 호출을 통해 정적 메소드 'runTest' 호출 – – 정적 호출
객체가 다음과 같은 형태로 호출될 때 함수인 경우 __invoke() 메서드가 자동으로 호출됩니다.

class MethodTest {    
    public function __call($name, $arguments) {    
        // 参数 $name 大小写敏感    
        echo "Calling object method &#39;$name&#39; "    
             . implode(&#39;, &#39;, $arguments). "\n";    
    }    

    /**  PHP 5.3.0 以上版本中本类方法有效  */    
    public static function __callStatic($name, $arguments) {    
        // 参数 $name 大小写敏感    
        echo "Calling static method &#39;$name&#39; "    
             . implode(&#39;, &#39;, $arguments). "\n";    
    }    
}    
$obj = new MethodTest;    
$obj->runTest(&#39;in object context&#39;);    
MethodTest::runTest(&#39;in static context&#39;);  // As of PHP 5.3.0

Nowdoc 구문

사용법은 Heredoc과 유사하지만 작은따옴표를 사용합니다. Heredoc은 큰따옴표를 사용하여 선언해야 합니다.
Nowdoc은 PHP 코드를 전달하는 데 매우 적합한 변수 구문 분석을 수행하지 않습니다.

// Nowdoc 单引号 PHP 5.3之后支持    $name = &#39;MyName&#39;;    
echo <<<&#39;EOT&#39;    My name is "$name".    
EOT;    
//上面代码输出 My name is "$name". ((其中变量不被解析)    // Heredoc不加引号    echo <<<FOOBAR    
Hello World!    
FOOBAR;    
//或者 双引号 PHP 5.3之后支持    echo <<<"FOOBAR"    Hello World!    
FOOBAR;

Heredoc을 통해 정적 변수, 클래스 멤버 및 클래스 상수 초기화를 지원합니다.

// 静态变量    function foo()    {    
    static $bar = <<<LABEL    
Nothing in here...    
LABEL;    
}    
// 类成员、常量    class foo    {    
    const BAR = <<<FOOBAR    
Constant example    
FOOBAR;    

    public $baz = <<<FOOBAR    
Property example    
FOOBAR;    
}

const를 사용하여 클래스 외부에서 상수를 정의할 수도 있습니다

//PHP中定义常量通常是用这种方式  define("CONSTANT", "Hello world.");  

//并且新增了一种常量定义方式  const CONSTANT = &#39;Hello World&#39;;

삼항 연산자는 쓰기에 대한 지름길을 추가합니다

원래 형식은 (expr1) ? (expr2) : (expr3)
expr1인 경우 결과가 True이면 expr2의 결과가 반환됩니다.
새로운 작성 방법이 추가되었습니다. 중간 부분을 생략할 수 있습니다. expr1 ?: expr3
expr1의 결과가 True이면 expr1의 결과가 반환됩니다.

$expr1=1;$expr2=2;//原格式  $expr=$expr1?$expr1:$expr2  //新格式  $expr=$expr1?:$expr2

출력 결과:
1
1

Null 병합 연산자(? ?)

간단한 판단

$param = $_GET[&#39;param&#39;] ?? 1;

동등함:

$param = isset($_GET[&#39;param&#39;]) ? $_GET[&#39;param&#39;] : 1;

Json이 중국어를 더 잘 이해함(JSON_UNESCAPED_UNICODE)

echo json_encode("中文", JSON_UNESCAPED_UNICODE);  
//输出:"中文"

Binary

$bin  = 0b1101;  
echo $bin;  
//13

유니코드 코드 포인트 번역 구문

16진수를 허용합니다. 유니코드 코드포인트 형식을 지정하고 큰따옴표나 heredoc로 묶인 UTF-8 인코딩 문자열을 인쇄합니다. 유효한 코드포인트는 모두 허용되며 앞에 오는 0은 생략할 수 있습니다.

 echo "\u{9876}"

이전 버전 출력: u{9876}
새 버전 입력: Top

**를 사용하여 거듭제곱 연산을 수행합니다.

오른쪽 조인 연산자 *를 추가하여 거듭제곱 연산을 수행합니다. 또한 지수화를 수행하고 값을 할당하는 것을 의미하는 약어 *= 연산자도 지원합니다.

printf("2 ** 3 ==      %d\n", 2 ** 3);printf("2 ** 3 ** 2 == %d\n", 2 ** 3 ** 2);$a = 2;$a **= 3;printf("a ==           %d\n", $a);

출력
2 ** 3 == 8
2 * 3 * 2 == 512
a == 8

우주선 연산자(조합 비교 연산자)

우주선 연산자는 두 표현식을 비교하는 데 사용됩니다. 언제 abig in etc 또는 small

위 내용은 PHP5.X에서 PHP7.1.x로 기능 통합의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제