정보실

웹학교

정보실

php 2020년 PHP

본문

일반적으로 웹 개발자와 프로그래머 사이에는 비밀이 없습니다. 

PHP는 최고의 평판을 얻지 못합니다. 여전히 웹 애플리케이션을 구축하는 데 가장 많이 사용되는 언어 중 하나 임에도 불구하고; 수년에 걸쳐 PHP는 지저분한 코드베이스, 경험이 부족한 개발자, 안전하지 않은 코드, 일관성이 없는 핵심 라이브러리 등으로 명성을 얻었습니다.


https://stitcher.io/blog/php-in-2020 


PHP에 대한 많은 논쟁은 오늘날에도 여전히 유효하지만, PHP에서 깨끗하고 유지 관리 가능하며 빠르고 안정적인 응용 프로그램을 작성할 수 있다는 점도 장점입니다.


이 포스트에서는 PHP 개발의 이 밝은 면을 보고 싶습니다. 많은 단점에도 불구하고 PHP는 배울 가치가 있는 언어라는 것을 보여주고 싶습니다. PHP 5 시대가 끝나고 있음을 알고 싶습니다. 원하는 경우 현대적이고 깨끗한 PHP 코드를 작성하고 10 년 전의 혼란을 많이 남겨 둘 수 있습니다.


지난 몇 년 동안 언어가 어떻게 변화하고 성숙했는지 살펴 보겠습니다. 몇 분 동안 편견을 없애고 오늘날 PHP가 무엇인지 놀랄 것입니다.


연혁 


세부 사항을 살펴보기 전에 요즘 언어인 PHP가 어떻게 개발되는지 검토해 보겠습니다. 

우리는 현재 버전 7.4에 있으며 2020 년 말에 PHP 8.0이 그 다음 버전이 될 것입니다.


5년 후반부터 핵심 팀은 일관된 연간 릴리스 주기를 유지하려고 노력했으며 지난 4 년 동안 성공했습니다.


일반적으로 모든 새 릴리스는 2 년 동안 적극적으로 지원되며 1 년의 "보안 수정 사항 만"제공됩니다. 목표는 개발자가 가능한 한 최신 상태를 유지하도록 동기를 부여하는 것입니다. 예를 들어 매년 5.4에서 7.0 사이로 점프하는 것보다 소규모 업그레이드가 더 쉽습니다.


마지막으로 PHP 5.6은 최신 5. * 릴리스였으며 7.0이 다음 버전이었습니다. 

PHP 6에서 어떤 일이 발생했는지 알고 싶다면 PHP Roundtable 팟 캐스트의 이 에피소드를 들을 수 있습니다.


요즘 PHP의 개발은 자원 봉사자 그룹에 의해 이루어지며, 일부는 고용주가 핵심 풀 타임으로 일하기 위해 지불합니다. 

언어가 어떻게 진화하는지에 대한 대부분의 토론은 메일링리스트에서 이루어집니다.


이 모든 것을 방해하면서 현대 PHP에 대한 몇 가지 일반적인 오해를 논의 해 봅시다.


PHP 타입 시스템 


PHP는 매우 약하고 동적으로 타이핑 된 언어로 시작하여 당시에 이점이 있었습니다. 사람들이 더 큰 프로젝트에 PHP를 사용하기 시작한 이래로 유형 시스템의 단점이 분명해졌으며 더 강력한 유형 지원이 필요했습니다.


오늘날 PHP는 다소 고유한 언어입니다. 여전히 동적이고 약한 형식의 코드를 작성할 수 있지만 훨씬 더 강력한 옵트 인 형식 시스템을 사용할 수 있습니다. Psalm, Phan 및 PHPStan과 같은 도구를 정적 분석과 함께 사용하면 안전하고 강력한 형식의 정적으로 분석 된 코드를 작성할 수 있습니다.


예를 들어, 현대적인 유형의 시스템을 전체적으로 사용하여 이 PHP 코드 스니펫을 살펴보십시오.


<?php declare(strict_types=1); final class Foo { public int $intProperty = 2; public ?string $nullableString = null; private Bar $bar; public function __construct(Bar $bar) { $this->bar = $bar; } public function withInt(int $value): self { $clone = clone $this; $clone->intProperty = $value; return $clone; } public function unionTypes(int|float $input): void { // Union types will be added in PHP 8 } } 


사실, PHP의 타입 시스템에는 여전히 제네릭이라는 중요한 기능이 아직 없습니다. 그들이 추가되기를 희망하지만 아직 구체적인 것은 없습니다. 형식화 된 배열의 경우 적절한 IDE 지원을 받으려면 docblock을 사용해야 합니다.


/** @var int[] */ public array $arrayOfInts = []; 


그리고 타입 배열은 docblock으로 해결할 수 있는 제네릭의 일반적인 사용 사례이지만, 아직 언어가 아니기 때문에 우리가 놓친 기능이 훨씬 더 많습니다.


PHP's syntax 


7. * 시대는 구문과 관련하여 PHP를 보다 성숙한 언어로 만드는 측면에서 많은 좋은 일을 해왔습니다. 

이것을 설명하기 위해 PHP에서 새로운 것의 전체 목록을 만들었습니다.


배열 구조 분해 할당(Array destructuring) :


[$a, $b] = $array; 


널 병합 연산자(The null coalescing operator) :


$value = $object->property ?? 'fallback if null'; $value = $array['foo'] ?? "fallback if key doesn't exists";  


널 병합 할당 연산자(The null coalescing assignment operator) :


public function get(string $input): string { return $this->cache[$input] ??= $this->sanitize($input); } 


배열 전개(Array spreading) : 


$a = [/* … */]; $b = [/* … */]; $mergedArray = [...$a, ...$b]; 


가변성 함수 (Variadic functions) : 


public function get(Foo ...$foos): void { foreach($foos as $foo) { // … } } 


Argument unpacking :


$this->get(...$arrayOfFoo); 


Typed properties:


public int $intProperty; 


Arrow functions, also called short closures:


$ids = array_map(fn(Post $post): int => $post->id, $posts); 


Generators : 


function make(array $input): Generator { foreach ($input as $item) { yield $this->doSomethingWith($item); } } 


그리고 훨씬 더. 이 목록에서 PHP가 오늘날에도 계속 발전하고 있음을 분명히 알 수 있기 때문에 앞으로 더 좋은 것들이 있을 것입니다.


PHP의 성능 


5. * 일로 돌아가서, PHP의 성능은… 평균이었습니다. 7.0을 사용하면 PHP 코어의 많은 부분이 처음부터 다시 작성되어 성능이 2 ~ 3 배 향상되었습니다. 또한 각 7. * 릴리스는 성능에 긍정적 인 영향을 미쳤습니다.


그래도 말로는 충분하지 않습니다. 벤치 마크를 살펴 보자. 운 좋게도 다른 사람들은 PHP 성능 벤치마킹에 많은 시간을 보냈습니다. Kinsta에 업데이트 된 목록이 있습니다.


최신 성능 관련 기능을 사전 로드라고 하며, 기본적으로 PHP 코드의 컴파일 된 부분을 메모리에 저장할 수 있습니다. 여기에서 몇 가지 벤치 마크를 볼 수 있습니다.


PHP 8이 도착하면 JIT 컴파일러를 사용하여 흥미로운 성능 향상을 약속하고 PHP가 웹 개발 외에 새로운 영역으로 들어갈 수 있습니다.


Frameworks and ecosystem 


PHP로 커뮤니티가 하는 일로 넘어갑니다. 분명히 하자 : PHP는 더 이상 워드 프레스가 아니다.


일반적으로 Symfony와 Laravel의 두 가지 주요 웹 응용 프로그램 프레임 워크와 몇 가지 작은 프레임 워크가 있습니다. 물론 Laminas, Yii, Cake, Code Igniter 등도 있습니다. 그러나 최신 PHP 개발이 어떤 모습인지 알고 싶다면 처음 두 가지 중 하나를 선택하면 됩니다.


두 프레임 워크 모두 패키지 및 제품의 대규모 에코 시스템을 가지고 있습니다. 관리자 패널 및 CRM에서 독립형 패키지, CI에서 프로파일러, 웹 소켓 서버, 큐 관리자, 지불 통합과 같은 수많은 서비스에 이르기까지 다양합니다. 솔직히 나열해야 할 것이 너무 많습니다.


이러한 프레임 워크는 실제 개발을 위한 것입니다. 순수한 컨텐츠 관리가 필요한 경우 WordPress, CraftCMS 및 Statamic과 같은 플랫폼이 점점 향상되고 있습니다.


PHP 에코 시스템의 현재 상태를 측정하는 한 가지 방법은 PHP의 기본 패키지 저장소 인 Packagist를 보는 것입니다. 기하 급수적으로 성장했습니다. 하루에 ± 2 천 5 백만 다운로드를 하면 PHP 생태계가 예전과 같은 작은 약자가 아니라고 말할 수 있습니다.


시간 경과에 따른 패키지 및 버전의 양을 나열하는 이 그래프를 살펴보십시오. Packagist 웹 사이트에서도 찾을 수 있습니다.


packagist.png 


애플리케이션 프레임 워크 및 CMS 외에도 지난 몇 년간 비동기 프레임 워크가 등장했습니다. 

이들은 PHP 또는 다른 언어로 작성된 프레임 워크 및 서버로, 사용자는 진정으로 비동기 PHP 코드를 실행할 수 있습니다. 일부 주요 업체로는 Swoole, AmpReactPHP가 있습니다.


우리가 비동기 세계에 뛰어 들었으므로 웹 소켓 및 IO가 많은 응용 프로그램과 같은 것들이 실제로 PHP 세계에서 관련이 되었습니다.


내부 메일 링리스트에서 코어에 libuv를 추가하기 위한 대화도 있었습니다. libuv를 모르는 사람들을 위해 : Node.js가 모든 비동기 성을 허용하는 데 사용하는 것과 동일한 라이브러리입니다. 누가 알아? PHP 8은 코어에 추가 한 버전 일 수 있습니다!


맺는 말


지난 몇 년 동안 PHP가 엄청나게 발전했다는 것을 보여 주었으면 좋으며, 깨끗하고 유지 관리 가능한 코드를 완벽하게 작성할 수 있습니다.


요즘 PHP 코드가 어떻게 생겼는지에 관심이 있다면 내 프로젝트 중 하나의 소스 코드와 우리가 개인적으로 유지 관리하는 많은 오픈 소스 패키지를 확인할 수 있습니다.


따라서 이 언어는 분명히 단점과 20 년의 유산을 가지고 있습니다. 나는 그것으로 일하는 것을 즐긴다 고 확신 할 수 있습니다.


경험상 신뢰할 수 있고 유지 보수가 용이하며 품질이 우수한 소프트웨어를 만들 수 있습니다. 내가 일하는 클라이언트는 나처럼 최종 결과에 만족합니다. PHP로 엉망진창을 많이 할 수는 있지만, 현명하고 올바르게 사용한다면 웹 개발을 위한 훌륭한 선택이라고 할 수 있습니다.



페이지 정보

조회 62회 ]  작성일20-01-26 12:06

웹학교