PHP 7 의 새로운 기능 에 대한 상세 한 설명
최근 에 한 프로젝트 는 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 의 새로운 특성 에 대한 자 료 를 정리 하고 관련 자 료 를 계속 보충 하 는 것 입 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel5.7 트레이닝 1(환경 구축~HelloWorld)후배와 함께 Laravel 기회에 할당되기 때문에 후배에게 튜토리얼과 복습을 겸하여 쓴다 대상은 PHP를 건다, Laravel은 초급자용 정도 후배씨는 PHP는 거는다. 프레임워크는 처음. 그 정도라도 알 수 있도록...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.