개발자 Brent는 2019년 PHP가 어떤 것인지 자세히 설명하는 기사를 게시했습니다.
Brent는 많은 핵심 기능이 여전히 일관되지 않은 메서드 서명과 구성 설정이 여전히 존재하는 등 PHP에 몇 가지 문제가 있음을 인정했습니다. 혼란스럽기는 하지만 자신의 개발 경험을 바탕으로 그는 PHP가 웹 개발을 위한 탁월한 선택이라고 믿습니다. PHP를 사용하면 안정적이고 유지 관리가 용이하며 고품질의 애플리케이션을 만들 수 있으며 자신과 고객 모두 최종 결과에 만족합니다. . (추천 학습: PHP7 기술 주제)
기사에서 Brent는 수년간 PHP 개발의 좋은 측면에 중점을 두고 다음과 같은 몇 가지 사항을 설명합니다. 🎜🎜 #PHP는 더 이상 10년 전의 끔찍한 언어가 아닙니다 ":
● PHP는 활발하게 개발되고 있으며 매년 새 버전이 출시됩니다#🎜🎜 #● PHP 5 이후 성능은 계속 향상
● 프레임워크, 패키지, 플랫폼으로 구성된 매우 활발한 언어 생태계가 있습니다
● PHP는 끊임없이 진화하고 있으며 많은 지난 몇 년 동안 새로운 도구가 추가되었습니다. 특징
● 다양한 개발 도구가 지난 몇 년 동안 성숙해지고 계속 성장하고 있습니다.
PHP는 활발하게 개발되고 있으며 매년 새로운 버전이 출시됩니다#🎜🎜 #현재 PHP 버전은 작년 12월에 출시된 7.3이고, 올해 말에 7.4가 출시될 예정이며, 다음 버전은 PHP 8.0이 될 예정입니다. 7.4 이후 버전.
5부터. 일반적으로 각 새 버전은 공식적으로 2년 동안 적극적으로 지원되며, 그 후 1년 동안 보안 수정만 지원됩니다. 이는 PHP 개발자가 가능한 한 최신 상태를 유지하도록 장려하는 것을 목표로 합니다.
보다 구체적인 릴리스 및 유지 관리 주기는 PHP 공식 웹사이트의 소개를 확인하세요:
#🎜🎜 #https://www.php.net/supported-versions.php위 표를 보면 버전 번호가 5에서 7로 뛴 것을 알 수 있습니다. 그래서 어디서 했나요? PHP 6으로 갈까요? 그런데 과학을 대중화해 볼까요? 실제로 PHP 커뮤니티는 이미 2005년부터 PHP 6를 출시했습니다. 그러나 유니코드 구현의 큰 어려움으로 인해 PHP 관계자는 PHP 6 GA를 출시하지 않았고 2010년에 PHP 6가 취소되었습니다. PHP 6 프로젝트는 취소되었지만 구현된 많은 기능이 PHP 5에 통합되었습니다.
PHP 6은 취소되었지만 이번 주요 버전의 이전 개발은 PHP 6라는 이름으로 진행되었기 때문에 많은 참고 자료와 책에서는 이 버전을 언급하기 위해 "PHP 6"을 사용합니다. 관계자들은 이것이 PHP 6을 포기한 후 혼란을 야기할 것이라고 걱정하여 단순히 PHP 6.X 버전 번호를 사용하지 않고 5에서 7로 바로 점프했습니다.
자세한 내용은 공식 설명을 확인하세요:
https://wiki.php.net/rfc/php6 #🎜🎜 #PHP 7.0, PHP의 핵심 부분이 완전히 재작성되어 최신 Zend 엔진이 탑재되어 PHP 성능이 2배 향상되었습니다. 세 번까지.저자는 이 점을 설명하기 위해 https://kinsta.com/blog/php-benchmarks의 벤치마크 테스트를 인용하여 7.0 이후 PHP 성능이 향상되었으며 PHP 웹 애플리케이션이 향상되었음을 지적했습니다. 어떤 경우에는 웹 프레임워크가 다른 언어보다 훨씬 더 나은 성능을 발휘합니다. 그러나 그는 또한 "물론 PHP 프레임워크가 C와 Rust보다 낫지는 않지만 Rails나 Django보다 훨씬 낫고 ExpressJS와 동일합니다."라고 말했습니다. 매우 활동적인 프레임워크와 패키지 그리고 플랫폼으로 구성된 언어생태
PHP 프레임워크라고 하면 워드프레스(WordPress)라고 해야 하지만 저자는 워드프레스는 절대 PHP를 대표하지 않는다고 말했습니다. 현재 PHP 생태계: “PHP 프레임워크는 더 이상 단순한 WordPress가 아닙니다”.
현재 PHP에는 Symfony와 Laravel, Zend, Yii, Cake, Code Igniter라는 두 가지 주요 웹 애플리케이션 개발 프레임워크와 여러 소규모 프레임워크가 있습니다.
Symfony와 Laravel은 모두 관리 패널 및 CRM, 독립 소프트웨어 패키지, CI, 분석기, 웹 소켓 서버, 대기열 관리자 및 결제 통합 등을 포함한 거대한 패키지 및 소프트웨어 생태계를 보유하고 있습니다. 또한 최근 몇 년 동안 PHP 비동기 프레임워크도 등장했습니다. Swoole, Amp 및 ReactPHP는 진정한 비동기 PHP를 실행하기 위해 PHP 또는 다른 언어로 작성된 프레임워크이자 서버입니다. .
저자는 PHP 생태계의 현재 상태를 측정하는 한 가지 방법은 주요 PHP 패키지 저장소인 Packagist의 데이터를 보는 것이라고 믿습니다. 다음 추세 차트를 보면 소프트웨어 패키지의 수가 기하급수적으로 증가하여 현재 등록된 소프트웨어 패키지는 223,217개이며, 총 설치 수는 14,827,204,847개에 이르렀음을 알 수 있습니다. PHP 생태계는 더 이상 이전만큼 약하지 않습니다.
다양한 버전에서 사용 가능한 소프트웨어 패키지 수
월별 패키지 설치 수
PHP 사용 통계 및 시장 포지셔닝에 대한 최신 데이터도 확인할 수 있습니다. :
http: //www.php.cn/toutiao-418943.html
PHP는 끊임없이 발전하고 있으며 지난 몇 년 동안 많은 새로운 기능이 추가되었습니다.
비동기 및 대기가 있지만 두 가지 요청된 기능은 아직 구현되지 않았습니다. 그러나 최근 PHP의 새로운 기능이 계속해서 등장하고 있으며 언어 자체도 여러 측면에서 개선되었습니다.
다음은 인기 있는 새로운 PHP 기능 중 일부입니다.
● 짧은 클로저
화살표 함수라고도 알려진 짧은 클로저는 PHP에서 더 짧은 함수를 작성하는 방법입니다. 클로저는 array_map 또는 array_filter와 같은 함수에 전달될 때 매우 유용할 수 있습니다.
// A collection of Post objects $posts = [/* … */]; $ids = array_map(fn($post) => $post->id, $posts);
● Null 병합 연산자
Null 병합 연산자는 삼항 연산자와 유사하지만 왼쪽 피연산자는 부울 값을 사용하는 대신 isset처럼 동작합니다. 따라서 이 연산자는 배열에 특히 유용합니다. 또한 변수가 설정되지 않은 경우 기본값을 할당합니다.
$undefined ?? 'fallback'; // 'fallback' $unassigned; $unassigned ?? 'fallback'; // 'fallback' $assigned = 'foo'; $assigned ?? 'fallback'; // 'foo' '' ?? 'fallback'; // '' 'foo' ?? 'fallback'; // 'foo' '0' ?? 'fallback'; // '0' 0 ?? 'fallback'; // 0 false ?? 'fallback'; // false
● Traits
Trait는 코드를 재사용하기 위한 메커니즘으로, 단일 상속의 일부 제한 사항을 줄일 수 있습니다. 특성을 클래스와 결합하는 의미는 복잡성을 줄이고 다중 상속 및 믹스인과 관련된 일반적인 문제를 방지하는 방법을 정의합니다.
Trait는 클래스와 유사하지만 세분화되고 일관된 방식으로 기능을 그룹화하는 데만 사용되며 기존 상속을 보완하며 클래스 멤버 애플리케이션에는 상속이 필요하지 않습니다.
<?php trait ezcReflectionReturnInfo { function getReturnType() { /*1*/ } function getReturnDescription() { /*2*/ } } class ezcReflectionMethod extends ReflectionMethod { use ezcReflectionReturnInfo; /* ... */ } class ezcReflectionFunction extends ReflectionFunction { use ezcReflectionReturnInfo; /* ... */ } ?>
●유형화된 속성
속성 유형, 클래스 변수는 다음과 같은 유형을 정의할 수 있습니다.
class A { public string $name; public Foo $foo; }
● 확산 연산자
확장 연산자, 이는 호출에서 직접 압축을 풀 수 있는 새로운 구문입니다. 예:
call_user_func_array([$db, 'query'], array_merge(array($query), $params));
새로운 구문을 직접 사용하여 $params 배열을 확장할 수 있습니다.
$db->query($query, ...$params);
● JIT 컴파일러: JIT는 PHP 8
에서 지원되는 것으로 확인되었습니다. JIT는 코드를 표현하는 컴파일러 전략입니다. 런타임 시 아키텍처 종속 기계어 코드로 변환되어 즉시 실행되는 중간 상태입니다. PHP에서 이는 JIT가 Zend VM에 의해 생성된 명령을 중간 표현으로 처리하고 이를 아키텍처 종속 기계어 코드에서 실행한다는 것을 의미합니다. 이는 더 이상 코드를 호스팅하는 것이 Zend VM이 아니라 기본 CPU임을 의미합니다.
● FFI
외부 함수 인터페이스는 순수 스크립팅 언어에서 C 함수를 호출하고 C 데이터 유형을 사용하여 "시스템 코드"를 보다 효율적으로 개발할 수 있게 해줍니다. PHP의 경우 FFI는 PHP 확장을 작성하고 순수 PHP를 사용하여 C 라이브러리에 바인딩하는 방법을 제공합니다.
● 익명 클래스
간단한 일회용 객체 생성을 위한 익명 클래스:
<?php // Pre PHP 7 code class Logger { public function log($msg) { echo $msg; } } $util->setLogger(new Logger()); // PHP 7+ code $util->setLogger(new class { public function log($msg) { echo $msg; } });
● 반환 유형 선언
반환 유형 선언:
<?php function sum($a, $b): float { return $a + $b; } // Note that a float will be returned. var_dump(sum(1, 2)); ?>
엄격 모드:
<?php declare(strict_types=1); function sum($a, $b): int { return $a + $b; } var_dump(sum(1, 2)); var_dump(sum(1, 2.5)); ?>
● 현대 암호화
리소듐 만들기 부채널 취약점을 방지하기 위해 보안 전문가가 신중하게 선택한 암호화 알고리즘으로 구성된 최신 암호화 라이브러리인 핵심 확장입니다.
● Generators
Generator는 반복자를 구현하는 간단하고 상용구가 없는 방법을 제공합니다.
지난 몇 년간 다양한 개발 도구들이 성숙해졌고 계속해서 성장해 왔습니다
마지막 부분에서 저자는 현재의 PHP 개발 도구들도 성숙해지고 계속해서 성장하고 있다고 분석했습니다.
그는 Psalm, Phan 및 PHPStan과 같은 정적 분석기를 사용했습니다. 이러한 도구는 PHP 코드를 정적으로 분석하고 모든 유형의 오류 및 가능한 버그를 보고합니다. 그들이 제공하는 기능은 TypeScript의 기능과 어느 정도 유사하지만, PHP는 현재 트랜스파일을 제공하지 않기 때문에 사용자 정의 구문은 허용되지 않습니다. 이는 PHP 개발이 문서에 의존해야 한다는 것을 의미하지만, 실제로 PHP 창시자인 Rasmus Lerdorf는 코어에 정적 분석 엔진을 추가하는 아이디어를 언급한 적이 있습니다.
受到 JavaScript 社区的启发,目前 PHP 也有在进行转换的相关研发,比如项目 Pre,它允许新的 PHP 语法转换为普通的 PHP 代码。虽然这个想法已经在 JavaScript 中被证明可行,但作者认为在 PHP 中,只有先提供了适当的 IDE 和静态分析支持,它才有可能实现。
讲完了 PHP 当前的这些变化,作者最后没有以“PHP 是世界上最好的语言”作结语,相反,他是这样说的:
All that being said, feel free to still think of PHP as a crappy language... I can say in confidence that I enjoy working with it.
话虽如此,但是还要继续认为 PHP 是蹩脚的语言那也是可以的。我可以很自信地说我喜欢 PHP。