>백엔드 개발 >PHP 튜토리얼 >PHP 구성 요소, 프레임워크 및 Composer에 대한 간략한 토론

PHP 구성 요소, 프레임워크 및 Composer에 대한 간략한 토론

little bottle
little bottle앞으로
2019-04-23 09:18:383719검색

이 기사에서는 주로 PHP 구성요소, 프레임워크 및 Composer를 소개합니다. 관심 있는 친구들이 배울 수 있는 학습 가치가 있습니다.

컴포넌트란 무엇입니까?

컴포넌트는 PHP 애플리케이션의 특정 문제를 해결하는 데 사용되는 일련의 관련 클래스, 인터페이스 및 특성으로 구성된 패키지 코드 세트입니다. 예를 들어, PHP 애플리케이션이 HTTP 요청을 보내고 받아야 하는 경우 guzzle/guzzle과 같은 미리 만들어진 구성 요소를 사용하여 구현할 수 있습니다. 우리는 이미 구현된 기능을 다시 구현하기 위해 컴포넌트를 사용하는 것이 아니라 프로젝트의 장기적인 목표를 달성하는 데 더 많은 시간을 투자하기 위해 사용합니다.

우수한 PHP 구성 요소는 다음과 같은 특징을 가지고 있습니다.

  • 단일 기능: 하나의 문제 해결에 집중하고 간단한 인터페이스를 사용하여 기능을 캡슐화합니다.
  • Small: 작고 정교하며 특정 문제를 해결하는 데 필요한 최소한의 코드만 포함합니다.
  • 협력: PHP 구성 요소는 잘 협력하고 함께 결합하여 대규모 프로젝트를 구현할 수 있습니다.
  • 좋은 테스트: 테스트 자체를 제공하고 충분한 테스트 범위를 갖습니다.
  • 완전한 문서: 개발자가 쉽게 설치하고, 이해하고, 이해할 수 있도록 완전한 문서를 제공해야 합니다.

Components vs Frameworks

프레임워크를 선택할 때 우리는 이 프레임워크의 도구에 많은 투자를 해야 합니다. 프레임워크는 일반적으로 많은 도구를 제공하지만, 필요한 특정 도구를 제공하지 않는 경우에는 고통은 우리에게 전달됩니다. 우리는 맞춤형 PHP 라이브러리를 찾아 통합하고 싶습니다. 타사 코드와 프레임워크가 동일한 인터페이스를 사용하지 않을 수 있으므로 타사 코드를 프레임워크에 통합하는 것이 어려울 수 있습니다.

프레임워크를 선택할 때 우리는 프레임워크의 미래에 초점을 맞춥니다. 하지만 특정 프레임워크가 항상 특정 작업에 가장 적합한 도구가 될 것이라고 누가 보장할 수 있습니까? 수년간 진행된 대규모 프로젝트는 잘 수행되어야 하며 항상 조정이 필요합니다. 잘못된 PHP 프레임워크를 선택하면 이를 수행하지 못할 수도 있습니다. 이전 PHP 프레임워크는 커뮤니티 지원 부족으로 인해 느리거나 오래되었을 수 있습니다. 간단히 말해서, PHP 사용 여부를 결정할 때 이러한 이전 프레임워크는 최신 객체 지향 코드 대신 절차적 코드를 사용하여 작성되는 경우가 많습니다. 프레임워크, 고려해야 할 사항이 많습니다.

다행히도 Laravel은 이러한 우려 사항에 대해 좋은 성능을 발휘하므로 많은 PHP 프레임워크 중에서 두각을 나타낼 수 있습니다. 어떤 의미에서는 Laravel도 컴포넌트 개발 기반의 프레임워크입니다(핵심 컴포넌트는 기능 측면에서 자체 Illuminate 라이브러리입니다). 구현 타사 구성 요소에 크게 의존합니다) Symfony에 비해 시작하기가 더 쉽기 때문에 확장성과 사용 용이성을 모두 갖추고 있습니다. 그러나 Laravel에는 몇 가지 단점도 있습니다. 예를 들어 Laravel 자체 구성 요소는 쉽게 분리되어 Laravel 프레임워크 외부에서 사용할 수 없습니다. (하지만 데이터베이스와 대기열 구성 요소를 분리할 수 있는 등 이러한 상황이 개선될 것이라고 믿습니다.) 종합해 보면, Laravel은 여전히 ​​강력한 애플리케이션을 빠르게 생성하는 데 도움이 되는 훌륭한 프레임워크입니다.

그럼 컴포넌트나 프레임워크를 사용해야 할까요? 대답은 올바른 작업에 적합한 도구를 사용하는 것입니다. 일부 PHP 구성 요소를 사용하여 소규모 프로젝트를 신속하게 구현할 수 있다면 구성 요소를 사용하십시오. 그런 다음 프레임워크를 사용하십시오(어떤 프레임워크를 사용할지 혼란스럽다면 Laravel을 선택하십시오). 프레임워크를 사용하면 프로젝트 개발을 안내하고 가속화할 수 있습니다.

구성 요소 사용

Packagist

우리는 Packagist에서 PHP 구성 요소를 찾습니다. 이 웹사이트는 Packagist에서 최고의 PHP 구성 요소를 수집하는 데 사용됩니다.

PHP 구성 요소, 프레임워크 및 Composer에 대한 간략한 토론

예를 들어 HTTP 메시지를 보내고 받기 위해 http 구성 요소를 사용하려면 검색 상자에 http를 검색하면 첫 번째 결과가 Guzzle이므로 사용하십시오.

Composer

Packagist는 PHP 구성 요소를 찾기 위한 커뮤니티이고 Composer는 PHP 구성 요소를 설치하기 위한 도구입니다. Composer는 PHP용 종속성 관리자입니다. Composer에 필요한 구성요소를 알려주면 Composer가 이러한 구성요소를 다운로드하여 프로젝트에 자동으로 로드합니다.

Composer와 Packagist는 긴밀하게 협력합니다. Composer에게 프로젝트에 다운로드된 guzzlehttp/guzzle组件,Composer会从Packagist中获取guzzlehttp/guzzle组件,找到这个组件的仓库地址,确定要使用哪个版本,还能找出这个组件的依赖,然后把guzzlehttp/guzzle 구성 요소와 해당 종속 항목을 사용하고 싶다고 말하면 됩니다.

또한 Composer는 프로젝트의 모든 PHP 구성 요소에 대해 PSR 표준 자동 로더를 자동으로 생성하여 종속성 관리 및 자동 로딩을 효과적으로 추상화합니다. 따라서 PHP 커뮤니티에 있어서 Composer는 가장 중요한 추가 도구입니다. 자동 로딩을 수동으로 구현하기 위해 include, require 및 spl_autoload_register를 사용해야 했던 고통스러운 시절에 대해 생각해 보십시오.

Composer 설치 및 사용에 대해서는 여기서는 자세히 다루지 않겠습니다. Composer 중국어 홈페이지를 참고해주세요.

샘플 프로젝트

아래에서는 샘플 프로젝트를 사용하여 Composer 및 구성 요소를 사용하여 PHP 애플리케이션을 개발하는 방법을 보여줍니다. 이 애플리케이션의 기능은 CSV 파일의 URL을 스캔하여 데드 링크를 찾는 것입니다. 각 URL에 대해 반환된 HTTP 상태 코드가 400보다 크거나 같으면 데드 링크가 표준 출력으로 전송됩니다. 이것은 명령줄 애플리케이션입니다. 개발 후에는 이 스크립트를 실행하고 csv 파일의 경로를 전달하고 표준 출력에 데드 링크 목록을 표시합니다.

컴포넌트 설치

시작하기 전에 기존 PHP 컴포넌트를 사용하여 어떤 작업을 해결할 수 있는지 살펴보겠습니다. 각 URL에 HTTP 요청을 보내는 것 외에도 csv 파일의 데이터를 반복적으로 처리할 수 있는 컴포넌트가 필요합니다. csv 파일에는 HTTP 요청을 보내고 HTTP 응답을 확인할 수 있는 컴포넌트도 필요합니다.

Packagist를 검색한 후 guzzlehttp/guzzleleague/csv라는 두 가지 구성 요소를 발견했습니다. 전자는 HTTP 메시지를 처리하는 데 사용되고 후자는 CSV를 처리하는 데 사용됩니다. 데이터. 다음으로 프로젝트의 최상위 수준에서 다음 명령을 실행합니다. guzzlehttp/guzzleleague/csv两个组件,前者用于处理HTTP消息,后者用于处理CSV数据。下面我们在项目最顶层运行如下命令:

composer require guzzlehttp/guzzle
composer require league/csv

Composer会将依赖安装到根目录的vendor目录下,安装完成后,会在根目录下生成composer.jsoncomposer.lock文件:

PHP 구성 요소, 프레임워크 및 Composer에 대한 간략한 토론

composer.lock文件中会列出项目使用的所有PHP组件,以及组件的具体版本号,这其实是锁定了项目,让项目只能使用具体版本的PHP组件。这样的好处是,composer会下载这个文件中列出的具体版本,而不管Packagist中可用的最新版本是多少,你应该把composer.lock文件纳入版本控制,这样让团队成员使用的PHP版本和你一样,如果本地开发和服务器使用的PHP组件版本相同,可以尽量降低由组件版本不同导致的bug。

如果确实要下载最新版本的组件并更新composer.lock,可以使用composer update命令。

自动加载

接下来我们来编写应用代码,在根目录下创建一个scan.php文件,然后在该文件顶部使用require导入Composer创建的自动加载器:

require 'vendor/autoload.php';

Composer创建的自动加载器其实就是个名为autoload.php的文件,保存在vendor目录中,Composer下载各个PHP组件时,会检查每个组件的composer.json文件,确定如何加载该组件,得到这个信息后,Composer会在本地为该组件创建一个符合PSR标准的自动加载器。这样我们就可以实例化项目中的任何PHP组件,这些组件按需自动加载。

编写代码

下面我们正式使用Guzzle和CSV组件编写scan.php代码:

//使用composer自动加载器
require 'vendor/autoload.php';

//实例Guzzle Http客户端
$client = new GuzzleHttp\Client();

//打开并迭代处理CSV
$csv = League\Csv\Reader::createFromPath($argv[1]);
foreach ($csv as $csvRow) {
    try {
        //发送HTTP GET请求
        $httpResponse = $client->get($csvRow[0]);

        //检查HTTP响应的状态码
        if($httpResponse->getStatusCode() >= 400) {
            throw new Exception();
        }
    } catch (Exception $e) {
            //把死链发给标准输出
            echo $csvRow[0] . PHP_EOL;
    }
}

下面我们在urls.csv中添加一些URL,一行一个,而且至少有一个是死链:

PHP 구성 요소, 프레임워크 및 Composer에 대한 간략한 토론

然后打开终端,执行scan.php脚本:

php scan.php urls.csv

我们传入了两个参数,第一个是脚本文件scan.phprrreee

Composer는 설치가 완료된 후 composer 루트 디렉터리의 <code>vendor 디렉터리에 종속성을 설치합니다. json 및 composer.lock 파일:

PHP 구성 요소, 프레임워크 및 Composer에 대한 간략한 토론PHP 구성 요소, 프레임워크 및 Composer에 대한 간략한 토론

composer.lock 파일에는 프로젝트에서 사용하는 모든 PHP 구성 요소와 구성 요소의 특정 버전 번호가 나열됩니다. 이는 실제로 잠깁니다. 프로젝트에서 특정 버전의 PHP 구성 요소만 사용할 수 있도록 합니다. 이것의 장점은 작곡가가 Packagist에서 사용 가능한 최신 버전에 관계없이 이 파일에 나열된 특정 버전을 다운로드한다는 것입니다. 팀 구성원이 다음을 수행할 수 있도록 composer.lock 파일을 버전 제어에 넣어야 합니다. 사용하는 PHP 버전이 동일합니다. 로컬 개발에서 사용하는 PHP 컴포넌트 버전과 서버가 동일하면 컴포넌트 버전 차이로 인한 버그를 최소화할 수 있습니다. 최신 버전의 구성 요소를 다운로드하고 composer.lock을 업데이트하려면 composer update 명령을 사용할 수 있습니다.

Autoload🎜다음으로 애플리케이션 코드를 작성하고 루트 디렉터리에 scan.php 파일을 만든 다음 파일 상단에 require를 사용합니다. Composer가 만든 오토로더 가져오기: 🎜rrreee🎜Composer가 만든 오토로더는 실제로 autoload.php라는 파일이며 vendor 디렉터리에 저장되어 있습니다. Composer는 각 PHP 구성 요소를 다운로드할 때 각 구성 요소의 composer.json 파일을 확인하여 구성 요소를 로드하는 방법을 결정합니다. 이 정보를 얻은 후 Composer는 구성 요소에 대한 로컬 PSR 표준을 만듭니다. . 이렇게 하면 프로젝트의 모든 PHP 구성 요소를 인스턴스화할 수 있으며 이러한 구성 요소는 요청 시 자동으로 로드됩니다. 🎜

코드 작성🎜🎜이제 공식적으로 Guzzle 및 CSV 구성 요소를 사용하여 scan.php 코드를 작성합니다. 🎜rrreee🎜이제 urls.csv를 작성합니다. 코드 > URL을 한 줄에 하나씩 추가하세요. 적어도 하나는 데드 링크입니다: 🎜🎜<img src="https://img.php.cn/upload/article/000/000/031/35c23c09f7b13891ccd6cd729a2ec6cd-2.%20png" alt="PHP 구성 요소, 프레임워크 및 Composer에 대한 간략한 토론" >🎜🎜그런 다음 터미널을 열고 <code>scan.php 스크립트를 실행하세요: 🎜rrreee🎜우리는 두 개의 매개 변수를 전달했습니다. 첫 번째 매개 변수는 스크립트 파일 scan.php의 경로입니다. , 다른 하나는 CSV 파일의 경로입니다. 출력은 다음과 같습니다: 🎜🎜🎜🎜🎜관련 튜토리얼: 🎜PHP 비디오 튜토리얼🎜🎜🎜

위 내용은 PHP 구성 요소, 프레임워크 및 Composer에 대한 간략한 토론의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제