PHP 5.4의 새로운 기능
스승님
특성
특성을 도입하면 클래스의 내용이 확장되어 클래스가 어떤 형태로든 다중 상속을 실현하여 더욱 유연해질 수 있습니다
특성을 인스턴스화할 수 없습니다
샘플 코드:
- 특성 Hello {
- 공개 함수 sayHello() {
- echo 'Hello 'n";
- }
- }
- 특성 World {
- public function sayWorld() {
- echo 'World' . "n";
- }
- }
- class MyHelloWorld {
- use Hello, World;
- 공개 함수 sayExclaimMark() {
- echo '!' . "n";
- }
- }
- $o = new MyHelloWorld();
- $o->sayHello( );
- $o->sayWorld();
- $o->sayExclaimMark();
-
코드 복사
특성의 상속 순서에 유의해야 합니다.
현재 클래스의 멤버는 특성 메서드를 재정의하고 특성은 상속된 메서드를 재정의합니다.
동일한 클래스에서 여러 특성을 사용하면 메서드 충돌이 발생합니다. 문제를 해결하려면 대신 키워드를 사용하세요
샘플 코드:
- 특성 A {
- 공용 함수 smallTalk() {
- echo 'a';
- }
- 공용 함수 bigTalk( ) {
- echo 'A';
- }
- }
- 특성 B {
- 공용 함수 smallTalk() {
- echo 'b';
- }
- 공용 함수 bigTalk() {
- echo 'B';
- }
- }
- class Talker {
- A, B 사용 {
- B::smallTalk 대신 A;
- A: : B 대신 bigTalk;
- }
- }
- class Aliased_Talker {
- A, B 대신 사용 {
- B::smallTalk 대신 A;
- B 대신 A::bigTalk;
- B ::bigTalk as talk;
- }
- }
코드 복사
새로운 짧은 배열 구문
- $a = [1, 2, 3, 4];
- $a = ['하나' => => 2, '3' => 4]
-
코드 복사
함수에서 반환된 배열의 멤버 액세스 분석에 대한 지원이 추가되었습니다
- function foo()
- {
- return array(1,3,4,5);
- }
- $ var =foo()[0];
코드 복사
이제 =는 short_open_tag php.ini 옵션 설정 여부에 관계없이 항상 사용할 수 있습니다= 将总是可用
인스턴스화 중 클래스 멤버에 대한 액세스 추가
- class Test
- {
- public function foo()
- {
- //todo
- return 1;
- }
- }
- $var = (new Test)->foo()
-
코드 복사
ps: 괄호에 주의하세요
이제 SESSION 확장에서 파일 업로드 진행 상황을 추적할 수 있습니다
php.ini에서 session.upload_progress.enabled = On, 구성
파일 업로드 진행 상황 추적 기능이 활성화됩니다
max_input_vars 지시어
php.ini 파일에서 max_input_vars 값을 설정합니다.
$_GET, $_POST 및 $_COOKIE의 최대 길이를 제어합니다.
서비스 거부 공격에 대한 해시 충돌 구성 가능성을 줄입니다
이해하세요
클로저는 이제 $this를 지원합니다
이제 Class::{expr}() 구문을 지원합니다
샘플 코드:
- class Utils
- {
- public static function test1()
- {
- echo 1;
- }
- 공개 정적 함수 test2()
- {
- echo 2;
- }
- }
- $m = 'test';
- Utils::{$m (10-8) }();
- Utils::test2();
코드 복사 새 바이너리 리터럴(예: 0b001001101)
PHP 5.5의 새로운 기능
스승님
opcache는 PHP 배포 패키지에 통합되어 있습니다
opcache는 실제로 apc와 유사한 기능을 갖춘 zend사의 Zend Optimizer Plus입니다
apc보다 성능이 좋고 opcode가 최적화되어 있으며 opcache에 대한 추가 정보
브라더버드 블로그로 놀러오세요
Zend O에 대한 작은 공유
따라서 PHP를 설치할 때 컴파일 매개변수를 추가해야 합니다.
- --enabled-opcache
- 권장 구성(php.ini)
- zend_extension=opcache.so
- opcache.enable_cli=1
- opcache.memory_consumption= 128 //공유 메모리 크기, 필요에 따라 조정 가능
- opcache.interned_strings_buffer=8 //인턴 문자열의 메모리 크기도 조정 가능
- opcache.max_accelerated_files=4000 //캐시된 파일의 최대 개수
- opcache.revalidate_freq=60 //60초마다 파일 업데이트 확인
- opcache.fast_shutdown=1 //빠른 종료를 활성화합니다. PHP 요청 종료에서 이 기능을 켜면 메모리 복구 속도가 빨라집니다
- opcache. save_comments=0 //파일/함수 주석 저장 안함
코드 복사
발전기
Python에 익숙한 학생들은 생성기에 대해서도 분명 익숙할 것입니다
그 기능은 함수 실행을 중단하고 foreach 에서 사용할 수 있는 반복자를 반환하기 위해 함수에서 키워드 항복을 사용하는 것입니다.
이 구문은 PHP5.5에서 가장 흥미로운 기능이 될 것입니다
다음 코드는 생성기의 사용법을 보여주고 생성기의 장점을 강조하기 위해 비교합니다.
- ini_set('memory_limit', '512M');
- $cmd = isset($argv[1]) ? [1] : 0;
- function xrange($start, $end, $step = 1)
- {
- if($start <= $end)
- {
- if($step <= 0)
- {
- throw new LogicException('step must be ve');
- }
- for($i = $start; $i <= $end ; $i = $i $step)
- {
- Yield $i;
- }
- }else{
- if($step >= 0)
- {
- throw new LogicException('단계는 -ve여야 합니다');
- }
- for($i = $start; $i >= $end; $i = $i $step)
- {
- Yield $i;
- }
- }
- }
-
- if($cmd == 0)
- {
- $r = 범위(1, 1000000);
- foreach($r as $v)
- {
- if($v > 20)
- {
- break;
- }
- echo "$vt";
- }
- $m = memory_get_usage(true);
- echo "n" . $m/1014/1024 . "Mn";
- }else if($cmd == 1){
- $r = xrange (1, 1000000);
- foreach($r as $v)
- {
- if($v > 20)
- {
- break;
- }
- echo " $vt";
- }
- $m = memory_get_usage(true);
- echo "n" . $m / 1014 /1024 . "Mn";
- }else{
- include 'php -excel.class.php';
- $stime = microtime(true);
- if($cmd == 3)
- {
- $data = array();
- for($ i = 0; $i < 10000;$i )
- {
- $data[] = range(1,100);
- }
- $xls = new Excel_XML();
- $xls ->addWorksheet('test', $data);
- $xls->writeWorkbook('test.xls', './');
- }else{
- $data = function($ n = 10000){
- for($i = 0; $i < $n; $i )
- {
- Yield xrange(1,100);
- }
- };
- $xls = new Excel_XML();
- $xls->addWorksheet('test', $data());
- $xls->writeWorkbook('test.xls', './');
- }
- $ctime = microtime(true) - $stime;
- $m = memory_get_usage(true);
- echo "n" . $m / 1014 /1024 .
- echo "비용 시간:" . $ctime . "sn";
- }
-
코드 복사
ps: php-excel.class.php 파일의 내용은 이 요지를 참고하세요
php-excel.php
새로운 finally 키워드
샘플 코드:
- function getLines($file)
- {
- $f = fopen($file, 'r');
- 시도
- {
- while ($line = fgets($f))
- {
- Yield $line;
- }
- } finally {
- fclose($f);
- }
- }
- foreach(getLines('finally.php') as $v)
- {
- echo $v;
- }
복사 코드 코드 작성 시 좋은 습관을 기르고 적시에 오픈 리소스를 공개해야 합니다
비밀번호 API
비밀번호 시리즈 기능은 우리를 위해 비밀번호를 저장하여 더 간단하고 안전한 방법을 실현합니다
비밀번호는 일반 텍스트에서 md5, md5 salt, mcrpty salt로 저장됩니다
Password_hash는 기본적으로 bcrypt 암호화 알고리즘을 사용하여 솔트를 자동으로 생성하고 비밀번호를 암호화합니다
샘플 코드
" n";var_dump(password_verify($pw1, $pwdb)) . "n"; $pw2 = '778920'; $pwdb =password_hash($pw2, PASSWORD_DEFAULT);- var_dump ($pwdb) . "n";
- var_dump(password_verify($pw1, $pwdb)) . "n";
- 코드 복사
-
- 신규 애플리케이션 개발 비밀번호 저장은 내장된 비밀번호 시리즈 기능을 활용하는 것이 좋습니다
-
배열_열
이 기능은 옛날부터 있었어야 했는데
데이터베이스에서 10개의 레코드를 검색하려면 이 10개의 레코드 중 지정된 열을 가져오려면 이전에만 foreach를 사용할 수 있습니다.
이제 이를 수행하려면 array_coulum 함수만 있으면 됩니다. 이 함수는 실질적으로 매우 중요하며 별도로 논의됩니다.
샘플 코드:
// 데이터베이스에서 반환된 가능한 레코드 세트를 나타내는 배열 $records = array( array( 'id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe',- ),
- array(
- 'id' => 3245,
- 'first_name' => 'Sally',
- 'last_name' => 'Smith',
- ),
- array(
- 'id' => 5342,
- ' first_name' => 'Jane',
- 'last_name' => 'Jones',
- ),
- array(
- 'id' => 5623,
- ' first_name' => ' Peter',
- 'last_name' => 'Doe',
- )
- );
- $first_names = array_column($records, 'first_name');
- print_r($first_names);
-
-
-
- 코드 복사
-
-
-
-
익숙한
foreach는 이제 list()를 지원합니다
$arr= array( 배열(1,2,3), 배열(1,2,3), 배열(1,2,3), ); foreach($arr as list($a, $b, $c))- {
- //todo
- }
-
-
-
- 코드 복사
-
-
- 순회된 배열의 하위 배열 개수는 동일해야 한다는 점에 유의하세요
-
empty()는 모든 표현식을 지원하며, 함수 호출에도 사용할 수 있습니다
이해하세요
GD 개선
새로운 imageflip() 기능을 사용한 뒤집기 지원
고급 자르기는 imagecrop() 및 imagecropauto() 기능 사용을 지원합니다
WebP 읽기 및 쓰기는 각각 imagecreatefromwebp() 및 imagewebp()를 지원합니다.
또한 PHP5.4 및 PHP5.5에는 새로운 함수, 새로운 클래스, 새로운 인터페이스, 새로운 전역 상수가 많이 있습니다
더 자세히 알고 싶으시면 아래 링크를 확인해주세요
http://www.php.net/manual/zh/migration55.new-functions.php
http://www.php.net/manual/zh/migration55.classes.php
http://www.php.net/manual/zh/migration55.new-methods.php
http://www.php.net/manual/zh/migration55.global-constants.php
http://www.php.net/manual/zh/migration54.functions.php
http://www.php.net/manual/zh/migration54.classes.php
http://www.php.net/manual/zh/migration54.methods.php
http://www.php.net/manual/zh/migration54.global-constants.php
더 높은 수준의 새로운 기능, PHP
|