PHP 7 의 새로운 기능 에 대한 상세 한 설명

10451 단어 PHP7새로운 특성
PHP 학습 의 새로운 기능
최근 에 한 프로젝트 는 php 7 을 사 용 했 지만 새로운 기능 이 많이 사용 되 지 않 은 것 같 습 니 다.사용 할 수 있 는 새로운 특성 을 정리 하고 싶 습 니 다.이전에 사 용 된 환경 은 php 5.4 였 고 모든 것 도 php 5.5 와 php 5.6 의 특성 을 정리 할 수 있 었 다.여 기 는 내 가 프로젝트 에 사용 할 수 있다 고 생각 하 는 특성 만 열거 하고 주요 내용 은 php 수첩 의 부록 에서 나온다.
Generators (PHP 5 >= 5.5.0, PHP 7)
yield 키 워드 를 추가 하여 generator 를 지원 합 니 다.Generators 는 더 간단 한 방법 으로 교체 기 를 제공 합 니 다.Iterator 인 터 페 이 스 를 실현 할 필요 가 없습니다.

<?php
function xrange($start, $limit, $step = 1) {
 for ($i = $start; $i <= $limit; $i += $step) {
  yield $i;
 }
}

echo 'Single digit odd numbers: ';

/*                      */
foreach (xrange(1, 9, 2) as $number) {
 echo "$number ";
}

이상 루틴 출력:
Single digit odd numbers: 1 3 5 7 9
자세 한 내용 은 생 성기 클릭
finally 키워드 추가(PHP 5>=5.5.0,PHP 7)
try-catch 는 현재 finally 를 지원 합 니 다.
foreach 는 현재 list()(PHP 5>=5.5.0,PHP 7)를 지원 합 니 다.
foreach 제어 구 조 는 현재 list()구 조 를 통 해 포 함 된 배열 을 단독 변수 로 분리 하 는 것 을 지원 합 니 다.예 를 들 면:

<?php
$array = [
 [1, 2],
 [3, 4],
];

foreach ($array as list($a, $b)) {
 echo "A: $a; B: $b
"; } ?>
이상 루틴 출력:
A: 1; B: 2
A: 3; B: 4
array_column (PHP 5 >= 5.5.0, PHP 7)
array_column―배열 에서 지정 한 열 을 되 돌려 줍 니 다.
표현 식 정의 상수 사용(PHP 5>=5.6.0,PHP 7)
이전 PHP 버 전에 서 는 상수,성명 속성,지정 함수 매개 변수 기본 값 을 정적 값 으로 정의 해 야 합 니 다.이 제 는 수치,문자열 글자 의 양,다른 상수 등 을 포함 한 수치 표현 식 을 사용 하여 상수,성명 속성,함수 매개 변수 기본 값 을 정의 할 수 있 습 니 다.

<?php
const ONE = 1;
const TWO = ONE * 2;

class C {
 const THREE = TWO + 1;
 const ONE_THIRD = ONE / self::THREE;
 const SENTENCE = 'The value of THREE is '.self::THREE;

 public function f($a = ONE + self::THREE) {
  return $a;
 }
}

echo (new C)->f()."
"; echo C::SENTENCE; ?>
이상 루틴 출력:
4
The value of THREE is 3
현재 const 키 워드 를 통 해 형식 을 array 의 상수 로 정의 할 수 있 습 니 다.

<?php
const ARR = ['a', 'b'];

echo ARR[0];
?>

이상 루틴 출력:
a
...연산 자 를 사용 하여 변수 함수 정의(PHP 5>=5.6.0,PHP 7)
이 제 는 func 에 의존 하지 않 아 도 됩 니 다.get_args(),...연산 자 를 사용 하여 길 어 지 는 매개 변수 함 수 를 실현 합 니 다.

<?php
function f($req, $opt = null, ...$params) {
 // $params              
 printf('$req: %d; $opt: %d; number of params: %d'."
", $req, $opt, count($params)); } f(1); f(1, 2); f(1, 2, 3); f(1, 2, 3, 4); f(1, 2, 3, 4, 5); ?>
이상 루틴 출력:
$req: 1; $opt: 0; number of params: 0
$req: 1; $opt: 2; number of params: 0
$req: 1; $opt: 2; number of params: 1
$req: 1; $opt: 2; number of params: 2
$req: 1; $opt: 2; number of params: 3
...연산 자 를 사용 하여 인자 전개(PHP 5>=5.6.0,PHP 7)
함 수 를 호출 할 때...연산 자 를 사용 하여 배열 과 옮 겨 다 닐 수 있 는 대상 을 함수 매개 변수 로 펼 칩 니 다.다른 프로 그래 밍 언어,예 를 들 어 Ruby 에 서 는 연결 연산 자 라 고 불 린 다.

<?php
function add($a, $b, $c) {
 return $a + $b + $c;
}

$operators = [2, 3];
echo add(1, ...$operators);
?>

이상 루틴 출력:
6
use function 및 use const(PHP 5>=5.6.0,PHP 7)
use 연산 자 는 클래스 에서 외부 함수 와 상수 가 져 오 는 것 을 지원 하기 위해 확장 되 었 습 니 다.대응 하 는 구 조 는 use function 과 use const 입 니 다.

<?php
namespace Name\Space {
 const FOO = 42;
 function f() { echo __FUNCTION__."
"; } } namespace { use const Name\Space\FOO; use function Name\Space\f; echo FOO."
"; f(); } ?>
이상 루틴 출력:
42
Name\Space\f
__debugInfo() (PHP 5 >= 5.6.0, PHP 7)
가입debugInfo(),var 사용 시dump()출력 대상 은 출력 할 속성 과 값 을 제어 할 수 있 습 니 다.

<?php
class C {
 private $prop;

 public function __construct($val) {
  $this->prop = $val;
 }

 public function __debugInfo() {
  return [
   'propSquared' => $this->prop ** 2,
  ];
 }
}

var_dump(new C(42));
?>

이상 루틴 출력:

object(C)#1 (1) {
 ["propSquared"]=>
 int(1764)
}
스칼라 형식 설명(PHP 7)
스칼라 형식 설명 은 두 가지 모드 가 있 습 니 다.강제(기본 값)와 엄격 한 모드 입 니 다.현재 다음 유형의 인자(강제 모드 든 엄격 모드 든)를 사용 할 수 있 습 니 다.문자열(string),정수(int),부동 소수점(float),불 값(bool)을 사용 할 수 있 습 니 다.그것들 은 PHP 5 에 도 입 된 다른 유형 인 클래스 이름,인터페이스,그룹 과 리 셋 유형 을 확장 했다.

<?php
// Coercive mode
function sumOfInts(int ...$ints)
{
 return array_sum($ints);
}

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

이상 루틴 출력:
int(9)
엄격 한 모드 를 사용 하려 면 declare 성명 명령 을 파일 의 맨 위 에 두 어야 합 니 다.이것 은 스칼라 가 파일 에 기반 한 것 임 을 엄 격 히 밝 히 는 것 을 의미한다.이 명령 은 매개 변수의 형식 성명 뿐만 아니 라 함수 의 반환 값 성명 에 도 영향 을 줍 니 다.(반환 값 형식 성명,내 장 된 PHP 함수 및 확장 에 불 러 온 PHP 함수 참조)
반환 값 형식 설명(PHP 7)
PHP 7 에 서 는 반환 형식 성명 에 대한 지원 이 추가 되 었 습 니 다.매개 변수 형식 성명 과 유사 하 며,반환 형식 성명 은 함수 반환 값 의 유형 을 가리킨다.사용 가능 한 형식 은 매개 변수 성명 에서 사용 할 수 있 는 형식 과 같 습 니 다.

<?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 병합 연산 자(PHP 7)
일상 사용 중 3 원 표현 식 과 isset()을 동시에 사용 하 는 경우 가 많 기 때문에 null 통합 연산 자(?)를 추가 하 였 습 니 다.이 문법 사탕.변수 가 존재 하고 값 이 NULL 이 아니라면 자신의 값 을 되 돌려 줍 니 다.그렇지 않 으 면 두 번 째 동작 수 를 되 돌려 줍 니 다.

<?php
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

// Coalesces can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>

우주선 조작 부호(조합 비교 부호)(PHP 7)
우주선 조작 부 호 는 두 표현 식 을 비교 하 는 데 쓰 인 다.$a 가$b 보다 작 거나 같 거나 클 때 각각-1,0 또는 1 을 되 돌려 줍 니 다.비교 의 원칙 은 PHP 의 일반적인 비교 규칙 을 따라 진행 되 는 것 이다.

<?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
?>

define()을 통 해 상수 그룹 정의(PHP 7)
Array 형식의 상수 는 현재 define()을 통 해 정의 할 수 있 습 니 다.PHP 5.6 에 서 는 const 로 만 정의 할 수 있 습 니 다.

<?php
define('ANIMALS', [
 'dog',
 'cat',
 'bird'
]);

echo ANIMALS[1]; // outputs "cat"
?>

익명 클래스(PHP 7)
현재 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) {
}
Closure::call() (PHP 7)
Closure::call()은 현재 더 좋 은 성능 을 가지 고 있 습 니 다.짧 고 세련 된 일시 적 으로 연결 하 는 방법 으로 대상 에 가방 을 닫 고 호출 합 니 다.

<?php
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);

이상 루틴 출력:
1
1
unserialize()에 필터 제공(PHP 7)
이 기능 은 더 안전 한 방식 으로 신뢰 할 수 없 는 데 이 터 를 푸 는 데 목적 을 둔다.그것 은 화이트 리스트 의 방식 을 통 해 잠재 적 인 코드 주입 을 방지한다.

<?php
// converts all objects into __PHP_Incomplete_Class object
$data = unserialize($foo, ["allowed_classes" => false]);

// converts all objects into __PHP_Incomplete_Class object except those of MyClass and MyClass2
$data = unserialize($foo, ["allowed_classes" => ["MyClass", "MyClass2"]);

// default behaviour (same as omitting the second argument) that accepts all classes
$data = unserialize($foo, ["allowed_classes" => true]);

Group use declarations (PHP 7)
같은 namespace 에서 가 져 온 클래스,함수,상수 이 제 는 하나의 use 문 구 를 통 해 한꺼번에 가 져 올 수 있 습 니 다.

<?php

// Pre PHP 7 code
use some
amespace\ClassA; use some
amespace\ClassB; use some
amespace\ClassC as C; use function some
amespace\fn_a; use function some
amespace\fn_b; use function some
amespace\fn_c; use const some
amespace\ConstA; use const some
amespace\ConstB; use const some
amespace\ConstC; // PHP 7+ code use some
amespace\{ClassA, ClassB, ClassC as C}; use function some
amespace\{fn_a, fn_b, fn_c}; use const some
amespace\{ConstA, ConstB, ConstC}; ?>
이런 것들 을 정리 하면 내용 은 모두 phop 에서 온 문서 이 고 그 다음 에 여기 서 생략 한 새로운 특성 도 보충 할 수 있 습 니 다~
이상 은 PHP 의 새로운 특성 에 대한 자 료 를 정리 하고 관련 자 료 를 계속 보충 하 는 것 입 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기