PHP 7-퀵 가이드
PHP 7은 무엇입니까?
PHP 7은 PHP 프로그래밍 언어의 주요 릴리스이며 웹 애플리케이션을 개발하고 모바일 용으로 기업과 클라우드에 제공하는 방식의 혁명으로 선전됩니다. 이 릴리스는 2004 년 PHP 5 릴리스 이후 PHP의 가장 중요한 변경 사항으로 간주됩니다.
새로운 기능
PHP 7에 추가 된 수십 가지 기능이 있습니다. 가장 중요한 기능은 다음과 같습니다.
Improved performance − PHP7에서 PHPNG 코드를 병합하면 PHP 5보다 두 배 빠릅니다.
Lower Memory Consumption − 최적화 된 PHP 7은 더 적은 리소스를 사용합니다.
Scalar type declarations − 이제 매개 변수 및 반환 유형을 적용 할 수 있습니다.
Consistent 64-bit support − 64 비트 아키텍처 머신에 대한 일관된 지원.
Improved Exception hierarchy − 예외 계층 구조가 개선되었습니다.
Many fatal errors converted to Exceptions − 예외로 변환 된 많은 치명적인 오류를 포함하여 예외 범위가 증가합니다.
Secure random number generator − 새로운 보안 난수 생성기 API 추가.
Deprecated SAPIs and extensions removed − 최신 버전에서 다양한 이전 및 지원되지 않는 SAPI 및 확장이 제거되었습니다.
The null coalescing operator (??) − 새로운 null 병합 연산자가 추가되었습니다.
Return and Scalar Type Declarations − 반환 유형 및 매개 변수 유형에 대한 지원이 추가되었습니다.
Anonymous Classes − 익명 지원이 추가되었습니다.
Zero cost asserts − 제로 비용 어설 션 지원이 추가되었습니다.
PHP 7은 새로운 Zend Engine 3.0을 사용하여 애플리케이션 성능을 PHP 5.6보다 거의 두 배, 메모리 소비량 50 % 향상시킵니다. 추가 하드웨어없이 더 많은 동시 사용자에게 서비스를 제공 할 수 있습니다. PHP 7은 오늘날의 워크로드를 고려하여 설계 및 리팩토링되었습니다.
당으로 젠드 팀, 다음 그림은 인기있는 PHP 기반의 응용 프로그램에 PHP 5.6과 HHVM 3.7 대 PHP 7의 성능 비교를 보여줍니다.
마 젠토 1.9
PHP 7은 Magento 트랜잭션을 실행하는 동안 PHP 5.6에 비해 두 배 이상 빠릅니다.
드루팔 7
PHP 7은 Drupal 트랜잭션을 실행하는 동안 PHP 5.6에 비해 두 배 이상 빠릅니다.
Wordpress 3.6
PHP 7은 Wordpress 트랜잭션을 실행하는 동안 PHP 5.6에 비해 두 배 이상 빠릅니다.
동적 언어 비교
옵션 온라인 시도
온라인에서 사용 가능한 모든 예제를 컴파일하고 실행할 수 있도록 PHP 프로그래밍 환경을 온라인으로 설정했습니다. 읽고있는 내용에 대한 확신을 제공하고 다양한 옵션으로 프로그램을 확인할 수 있습니다. 모든 예제를 자유롭게 수정하고 온라인에서 실행하십시오.
CodingGround 에서 제공되는 온라인 컴파일러를 사용하여 다음 예제를 시도해보십시오 .
<html> <head> <title>Online PHP Script Execution</title> </head> <body> <?php echo "<h1>Hello, PHP!</h1>"; ?> </body> </html>
이 자습서에 제공된 대부분의 예제에 대해 Try it온라인 컴파일러로 이동하는 오른쪽 상단 모서리에있는 웹 사이트 코드 섹션의 옵션. 따라서 사용하고 학습을 즐기십시오.
PHP 웹 페이지를 개발하고 실행하려면 컴퓨터 시스템에 세 가지 중요한 구성 요소를 설치해야합니다.
Web Server− PHP는 Microsoft의 인터넷 정보 서버 (IIS)를 포함한 거의 모든 웹 서버 소프트웨어에서 작동하지만 가장 자주 사용되는 것은 Apache 서버입니다. 여기에서 무료로 아파치를 다운로드하십시오 −http://httpd.apache.org/download.cgi
Database− PHP PHP는 Oracle 및 Sybase를 포함한 거의 모든 데이터베이스 소프트웨어에서 작동하지만 가장 일반적으로 사용되는 것은 MySQL 데이터베이스입니다. 여기에서 MySQL을 무료로 다운로드하십시오-http://www.mysql.com/downloads/
PHP Parser− PHP 스크립트 명령을 처리하기 위해서는 웹 브라우저로 보낼 수있는 HTML 출력을 생성하기위한 파서가 설치되어 있어야합니다. 이 튜토리얼은 컴퓨터에 PHP 파서를 설치하는 방법을 안내합니다.
PHP 파서 설치
진행하기 전에 PHP를 사용하여 웹 프로그램을 개발할 수 있도록 컴퓨터에 적절한 환경 설정이 있는지 확인하는 것이 중요합니다. Apache의 htdocs 폴더에 다음 php 파일을 저장합니다.
phpinfo.php
<?php
phpinfo();
?>
브라우저의 주소 상자에 다음 주소를 입력하십시오.
http://127.0.0.1/phpinfo.php
PHP 설치 관련 정보를 보여주는 페이지가 표시되면 PHP와 웹 서버가 올바르게 설치되었음을 의미합니다. 그렇지 않으면 주어진 절차에 따라 컴퓨터에 PHP를 설치해야합니다.
이 섹션은 다음 네 가지 플랫폼에 PHP를 설치하고 구성하는 방법을 안내합니다.
Apache를 사용하여 Linux 또는 Unix에 PHP 설치
Apache를 사용하여 Mac OS X에 PHP 설치
IIS가있는 Windows NT / 2000 / XP에 PHP 설치
Apache를 사용하여 Windows NT / 2000 / XP에 PHP 설치
Apache 구성
Apache를 웹 서버로 사용하는 경우이 섹션에서는 Apache 구성 파일을 편집하도록 안내합니다.
여기에서 확인하십시오 -Apache 서버의 PHP 구성
PHP.INI 파일 구성
PHP 구성 파일, php.ini, PHP의 기능에 영향을 미치는 최종적이고 즉각적인 방법입니다.
여기에서 확인하십시오 -PHP.INI 파일 구성
Windows IIS 구성
Windows 컴퓨터에서 IIS를 구성하려면 IIS와 함께 제공된 IIS 참조 설명서를 참조하십시오.
PHP 7에는 새로운 기능인 Scalar 유형 선언이 도입되었습니다. 스칼라 유형 선언에는 두 가지 옵션이 있습니다.
coercive -강제는 기본 모드이며 지정할 필요가 없습니다.
strict -엄격 모드는 명시 적으로 암시해야합니다.
위의 모드를 사용하여 다음과 같은 기능 매개 변수 유형을 적용 할 수 있습니다.
- int
- float
- bool
- string
- interfaces
- array
- callable
예-강제 모드
<?php
// Coercive mode
function sum(int ...$ints) {
return array_sum($ints);
}
print(sum(2, '3', 4.1));
?>
다음 브라우저 출력을 생성합니다.
9
예-엄격 모드
<?php
// Strict mode
declare(strict_types=1);
function sum(int ...$ints) {
return array_sum($ints);
}
print(sum(2, '3', 4.1));
?>
다음 브라우저 출력을 생성합니다.
Fatal error: Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, ...
새로운 기능인 PHP 7에서 Return type declarations소개되었습니다. 반환 유형 선언은 함수가 반환해야하는 값 유형을 지정합니다. 반환 유형에 대해 다음 유형을 선언 할 수 있습니다.
- int
- float
- bool
- string
- interfaces
- array
- callable
예-유효한 반환 유형
<?php
declare(strict_types = 1);
function returnIntValue(int $value): int {
return $value;
}
print(returnIntValue(5));
?>
다음 브라우저 출력을 생성합니다.
5
예-잘못된 반환 유형
<?php
declare(strict_types = 1);
function returnIntValue(int $value): int {
return $value + 1.0;
}
print(returnIntValue(5));
?>
다음 브라우저 출력을 생성합니다.
Fatal error: Uncaught TypeError: Return value of returnIntValue() must be of the type integer, float returned...
새로운 기능인 PHP 7에서 null coalescing operator (??)소개되었습니다. 대체하는 데 사용됩니다ternaryisset () 함수와 함께 작동합니다. 그만큼Null통합 연산자는 존재하고 NULL이 아닌 경우 첫 번째 피연산자를 반환합니다. 그렇지 않으면 두 번째 피연산자를 반환합니다.
예
<?php
// fetch the value of $_GET['user'] and returns 'not passed'
// if username is not passed
$username = $_GET['username'] ?? 'not passed';
print($username);
print("<br/>");
// Equivalent code using ternary operator
$username = isset($_GET['username']) ? $_GET['username'] : 'not passed';
print($username);
print("<br/>");
// Chaining ?? operation
$username = $_GET['username'] ?? $_POST['username'] ?? 'not passed';
print($username);
?>
다음 브라우저 출력을 생성합니다.
not passed
not passed
not passed
PHP 7에는 새로운 기능인 우주선 운영자가 도입되었습니다. 두 표현식을 비교하는 데 사용됩니다. 첫 번째 표현식이 두 번째 표현식보다 작거나 같거나 크면 -1, 0 또는 1을 반환합니다.
예
<?php
//integer comparison
print( 1 <=> 1);print("<br/>");
print( 1 <=> 2);print("<br/>");
print( 2 <=> 1);print("<br/>");
print("<br/>");
//float comparison
print( 1.5 <=> 1.5);print("<br/>");
print( 1.5 <=> 2.5);print("<br/>");
print( 2.5 <=> 1.5);print("<br/>");
print("<br/>");
//string comparison
print( "a" <=> "a");print("<br/>");
print( "a" <=> "b");print("<br/>");
print( "b" <=> "a");print("<br/>");
?>
다음 브라우저 출력을 생성합니다.
0
-1
1
0
-1
1
0
-1
1
이제 배열 상수는 다음을 사용하여 정의 할 수 있습니다. define()함수. PHP 5.6에서는 다음을 사용해서 만 정의 할 수 있습니다.const 예어.
예
<?php
//define a array using define function
define('animals', [
'dog',
'cat',
'bird'
]);
print(animals[1]);
?>
다음 브라우저 출력을 생성합니다.
cat
이제 새 클래스를 사용하여 익명 클래스를 정의 할 수 있습니다. 전체 클래스 정의 대신 익명 클래스를 사용할 수 있습니다.
예
<?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) {
print($msg);
}
});
$app->getLogger()->log("My first Log Message");
?>
다음 브라우저 출력을 생성합니다.
My first Log Message
Closure::call()메서드는 객체 범위를 클로저에 임시로 바인딩하고 호출하는 간단한 방법으로 추가됩니다. 에 비해 성능이 훨씬 빠릅니다.bindTo PHP 5.6.
예-PHP 7 이전
<?php
class A {
private $x = 1;
}
// Define a closure Pre PHP 7 code
$getValue = function() {
return $this->x;
};
// Bind a clousure
$value = $getValue->bindTo(new A, 'A');
print($value());
?>
다음 브라우저 출력을 생성합니다.
1
예-PHP 7 이상
<?php
class A {
private $x = 1;
}
// PHP 7+ code, Define
$value = function() {
return $this->x;
};
print($value->call(new A));
?>
다음 브라우저 출력을 생성합니다.
1
PHP 7은 Filtered를 소개합니다 unserialize()신뢰할 수없는 데이터에서 개체를 직렬화 해제 할 때 더 나은 보안을 제공하는 함수입니다. 가능한 코드 삽입을 방지하고 개발자가 직렬화 해제 될 수있는 클래스를 허용 목록에 추가 할 수 있습니다.
예
<?php
class MyClass1 {
public $obj1prop;
}
class MyClass2 {
public $obj2prop;
}
$obj1 = new MyClass1();
$obj1->obj1prop = 1;
$obj2 = new MyClass2();
$obj2->obj2prop = 2;
$serializedObj1 = serialize($obj1);
$serializedObj2 = serialize($obj2);
// default behaviour that accepts all classes
// second argument can be ommited.
// if allowed_classes is passed as false, unserialize converts all objects into __PHP_Incomplete_Class object
$data = unserialize($serializedObj1 , ["allowed_classes" => true]);
// converts all objects into __PHP_Incomplete_Class object except those of MyClass1 and MyClass2
$data2 = unserialize($serializedObj2 , ["allowed_classes" => ["MyClass1", "MyClass2"]]);
print($data->obj1prop);
print("<br/>");
print($data2->obj2prop);
?>
다음 브라우저 출력을 생성합니다.
1
2
PHP7에서 새로운 IntlChar추가 ICU 기능을 노출하려는 클래스가 추가되었습니다. 이 클래스는 유니 코드 문자를 조작하는 데 사용할 수있는 여러 정적 메서드 및 상수를 정의합니다. 당신은 가지고 있어야합니다Intl 이 클래스를 사용하기 전에 설치된 확장.
예
<?php
printf('%x', IntlChar::CODEPOINT_MAX);
print (IntlChar::charName('@'));
print(IntlChar::ispunct('!'));
?>
다음 브라우저 출력을 생성합니다.
10ffff
COMMERCIAL AT
true
PHP 7에서는 크로스 플랫폼 방식으로 암호 학적으로 안전한 정수와 문자열을 생성하기 위해 다음 두 가지 새로운 함수가 도입되었습니다.
random_bytes() − 암호 학적으로 안전한 의사 랜덤 바이트를 생성합니다.
random_int() − 암호 학적으로 안전한 의사 랜덤 정수를 생성합니다.
random_bytes ()
random_bytes ()는 솔트, 키 또는 초기화 벡터를 생성 할 때와 같이 암호화 용도에 적합한 임의 길이의 암호화 임의 바이트 문자열을 생성합니다.
통사론
string random_bytes ( int $length )
매개 변수
length − 반환되어야하는 임의 문자열의 길이 (바이트).
반환 값
요청 된 수의 암호화 보안 임의 바이트가 포함 된 문자열을 반환합니다.
오류 / 예외
적절한 임의성 소스를 찾을 수없는 경우 예외가 발생합니다.
유효하지 않은 매개 변수가 주어지면 TypeError 던져 질 것입니다.
유효하지 않은 길이의 바이트가 주어지면 오류가 발생합니다.
예
<?php
$bytes = random_bytes(5);
print(bin2hex($bytes));
?>
다음 브라우저 출력을 생성합니다.
54cc305593
random_int ()
random_int() 편향되지 않은 결과가 중요한 경우에 사용하기에 적합한 암호화 무작위 정수를 생성합니다.
통사론
int random_int ( int $min , int $max )
매개 변수
min − 반환 할 가장 낮은 값입니다. PHP_INT_MIN 또는 더 높게.
max -반환 할 가장 높은 값이며 이보다 작거나 같아야합니다. PHP_INT_MAX.
반환 값
최소에서 최대까지의 범위에서 암호화로 안전한 임의의 정수를 반환합니다.
오류 / 예외
적절한 임의성 소스를 찾을 수없는 경우 Exception 던져 질 것입니다.
유효하지 않은 매개 변수가 주어지면 TypeError 던져 질 것입니다.
최대 값이 최소값보다 작 으면 Error 던져 질 것입니다.
예
<?php
print(random_int(100, 999));
print(" ");
print(random_int(-1000, 0));
?>
다음 브라우저 출력을 생성합니다.
614
-882
Expectations이전 assert () 함수에 대한 하위 호환성 향상입니다. 기대는 프로덕션 코드에서 비용이 0 인 어설 션을 허용하고 어설 션이 실패 할 때 사용자 지정 예외를 throw하는 기능을 제공합니다. assert ()는 이제 테스트 할 문자열 또는 부울과 비교하여 첫 번째 매개 변수가 표현식 인 언어 구조입니다.
assert ()에 대한 구성 지시문
지령 | 기본값 | 가능한 값 |
---|---|---|
zend.assertions | 1 | 1 − 코드 생성 및 실행 (개발 모드) 0 − 코드를 생성하지만 런타임시 점프 -1 − 코드 생성 금지 (생산 모드) |
assert.exception | 0 | 1 − 어설 션이 실패하면 예외로 제공된 객체를 던지거나 새로운 AssertionError 예외가 제공되지 않은 경우 개체입니다. 0 − 위에서 설명한대로 Throwable을 사용하거나 생성하지만, Throwable을 던지는 대신 해당 객체를 기반으로 경고 만 생성합니다 (PHP 5 동작과 호환). |
매개 변수
assertion− 주장. PHP 5에서는 평가할 문자열이거나 테스트 할 부울이어야합니다. PHP 7에서 이것은 실행될 값을 반환하는 표현식 일 수도 있으며 그 결과는 어설 션의 성공 여부를 나타내는 데 사용됩니다.
description − 주장이 실패 할 경우 실패 메시지에 포함될 선택적 설명.
exception − PHP 7에서 두 번째 매개 변수는 Throwable 설명 문자열 대신 객체입니다.이 경우 어설 션이 실패하고 assert.exception 구성 지시문이 활성화되었습니다.
반환 값
FALSE 주장이 거짓이면 TRUE 그렇지 않으면.
예
<?php
ini_set('assert.exception', 1);
class CustomError extends AssertionError {}
assert(false, new CustomError('Custom Error Message!'));
?>
다음 브라우저 출력을 생성합니다.
Fatal error: Uncaught CustomError: Custom Error Message! in...
PHP7부터는 단일 use 문을 사용하여 여러 use 문 대신 동일한 네임 스페이스에서 클래스, 함수 및 상수를 가져올 수 있습니다.
예
<?php
// Before PHP 7
use com\tutorialspoint\ClassA;
use com\tutorialspoint\ClassB;
use com\tutorialspoint\ClassC as C;
use function com\tutorialspoint\fn_a;
use function com\tutorialspoint\fn_b;
use function com\tutorialspoint\fn_c;
use const com\tutorialspoint\ConstA;
use const com\tutorialspoint\ConstB;
use const com\tutorialspoint\ConstC;
// PHP 7+ code
use com\tutorialspoint\{ClassA, ClassB, ClassC as C};
use function com\tutorialspoint\{fn_a, fn_b, fn_c};
use const com\tutorialspoint\{ConstA, ConstB, ConstC};
?>
PHP 7부터 오류 처리 및보고가 변경되었습니다. PHP 5에서 사용하는 기존 오류보고 메커니즘을 통해 오류를보고하는 대신 이제 대부분의 오류는 오류 예외를 발생시켜 처리됩니다. 예외와 유사하게 이러한 오류 예외는 첫 번째 일치 catch 블록에 도달 할 때까지 버블 링됩니다. 일치하는 블록이 없으면 다음과 함께 설치된 기본 예외 처리기set_exception_handler()호출됩니다. 기본 예외 처리기가없는 경우 예외는 치명적인 오류로 변환되고 기존 오류처럼 처리됩니다.
오류 계층이 Exception에서 확장되지 않았기 때문에, PHP 5에서 catch (Exception $ e) {...} 블록을 사용하여 포착되지 않은 예외를 처리하는 코드는 이러한 오류를 처리하지 않습니다. catch (Error $ e) {...} 블록 또는set_exception_handler() 치명적인 오류를 처리하려면 핸들러가 필요합니다.
예
<?php
class MathOperations {
protected $n = 10;
// Try to get the Division by Zero error object and display as Exception
public function doOperation(): string {
try {
$value = $this->n % 0;
return $value;
} catch (DivisionByZeroError $e) {
return $e->getMessage();
}
}
}
$mathOperationsObj = new MathOperations();
print($mathOperationsObj->doOperation());
?>
다음 브라우저 출력을 생성합니다.
Modulo by zero
PHP 7에 새로운 기능 도입 intdiv(), 피연산자의 정수 나눗셈을 수행하고 나눗셈을 int로 반환합니다.
예
<?php
$value = intdiv(10,3);
var_dump($value);
print(" ");
print($value);
?>
다음 브라우저 출력을 생성합니다.
int(3)
3
PHP7 +부터 session_start() 함수는에 설정된 세션 구성 지시문을 재정의하는 옵션 배열을 허용합니다. php.ini. 이 옵션은session.lazy_write이는 기본적으로 켜져 있으며 세션 데이터가 변경된 경우 PHP가 모든 세션 파일을 덮어 쓰게합니다.
추가 된 또 다른 옵션은 read_and_close이는 세션 데이터를 읽은 다음 세션을 변경하지 않고 즉시 닫아야 함을 나타냅니다. 예 : Setsession.cache_limiter 비공개로 설정하고 다음 코드 스 니펫을 사용하여 세션을 읽은 직후 세션을 닫도록 플래그를 설정합니다.
<?php
session_start([
'cache_limiter' => 'private',
'read_and_close' => true,
]);
?>
다음 기능은 더 이상 사용되지 않으며 향후 PHP 릴리스에서 제거 될 수 있습니다.
PHP 4 스타일 생성자
PHP 4 스타일 컨스트럭터는 정의 된 클래스와 이름이 같은 메소드이며 현재는 사용되지 않으며 향후 제거 될 예정입니다. PHP 4 생성자가 클래스 내에 정의 된 유일한 생성자 인 경우 PHP 7은 E_DEPRECATED를 내 보냅니다. __construct () 메서드를 구현하는 클래스는 영향을받지 않습니다.
예
<?php
class A {
function A() {
print('Style Constructor');
}
}
?>
다음 브라우저 출력을 생성합니다.
Deprecated: Methods with the same name as their class will not be constructors
in a future version of PHP; A has a deprecated constructor in...
비 정적 메서드에 대한 정적 호출
비 정적 메서드에 대한 정적 호출은 더 이상 사용되지 않으며 향후 제거 될 수 있습니다.
예
<?php
class A {
function b() {
print('Non-static call');
}
}
A::b();
?>
다음 브라우저 출력을 생성합니다.
Deprecated: Non-static method A::b() should not be called statically in...
Non-static call
password_hash () 솔트 옵션
에 대한 소금 옵션 password_hash()개발자가 자신의 (일반적으로 안전하지 않은) 솔트를 생성하지 않도록 함수가 더 이상 사용되지 않습니다. 함수 자체는 개발자가 솔트를 제공하지 않을 때 암호 학적으로 안전한 솔트를 생성하므로 사용자 지정 솔트 생성이 더 이상 필요하지 않습니다.
capture_session_meta SSL 컨텍스트 옵션
그만큼 capture_session_metaSSL 컨텍스트 옵션은 더 이상 사용되지 않습니다. SSL 메타 데이터는 이제stream_get_meta_data() 함수.
다음 확장은 PHP 7에서 제거되었습니다.
- ereg
- mssql
- mysql
- sybase_ct
다음 SAPI는 PHP 7에서 제거되었습니다.
- aolserver
- apache
- apache_hooks
- apache2filter
- caudium
- continuity
- isapi
- milter
- nsapi
- phttpd
- pi3web
- roxen
- thttpd
- tux
- webjames