PHP를 사용하지 말아야 하는 두 가지 이유
PHP 개발자로서 저는 PHP5의 첫 번째 (옵션!) GC 구현인 PHP4 시절을 아직도 기억하고 있으며, PHP7의 등장에 대한 _과대광고_를 겪으며 살았습니다.
이 문서는 심포니 콘솔 개발에 대한 가장 유용하고 검색하기 쉬운 팁과 요령을 보여드리기 위해 작성되었습니다.
다음과 같은 경우 PHP 개발자 당신의 PHP 소프트웨어 개발 를 다음 단계로 끌어올리기 위해 이 글을 준비했습니다. 더 이상 고민할 필요 없이 본론으로 들어가겠습니다.
자주 듣게 됩니다:
PHP는 웹 페이지 제작에만 사용됩니다.
이는 완전히 사실이 아닙니다. PHP 개발 는 다양한 비즈니스 영역에서 사용되며, 언뜻 보기에는 사소해 보이는 경우가 많습니다.
둘 다 PHP 언어와 그 환경은 HTTP 통신을 완벽하게 지원하므로 CLI 환경 사용과 함께 웹 봇, 웹 크롤러 또는 외부 환경에서 데이터를 동기화하는 도구를 빠르게 만들 수 있습니다.
이를 뒷받침하기 위해 몇 가지 통계가 있습니다. Symfony 프레임워크명령줄에 쉽게 액세스할 수 있는 이 가장 많이 사용 및 다운로드된 TOP5에 올랐습니다. Symfony 역대 최고의 패키지입니다.
이 시점에서, 모든 비즈니스에 도움이 되는 몇 가지 팁을 공유하고자 합니다. PHP 개발자 작성 시 알아야 할 사항 코드 in PHP CLI에서 작동하도록 되어 있습니다.
항목을 선택할 수 있는 테이블 렌더링은 다음을 사용하여 쉽게 수행할 수 있습니다. Symfony 명령:
// src/App/Command/TestCommand.php
protected 함수 execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$io->title("대화형 선택 테이블 예제");
$table = $io->createTable();
$table->setHeaderTitle("대화형 선택 테이블 예제");
$table->setRows(iterator_to_array($this->tagsTableRows()));
$table->render();
$io->newLine();
Command::SUCCESS를 반환합니다;
}
위의 예제에서는 다음을 활용하고 있습니다. PHP 발전기 를 데이터 소스로 사용하면 향후 확장성에 도움이 됩니다. 위의 예는 간단한 데이터 생성기입니다:
보호된 함수 tagsTableRows(): 생성자
{
$apiTagsResponse = $this->someInjectedService->getTags();
foreach ($apiTagsResponse as $apiTagResponse) { {
yield [ $apiTagResponse->getName(), $apiTagResponse->getId() ];
}
}
최종 결과는 CLI로 렌더링된 테이블입니다.
대화형으로 만들려면 다음과 같은 래퍼로 제공되는 QuestionHelper를 사용해야 합니다. 심포니스타일
출력.
(...)
$choice = 새로운 ChoiceQuestion(
질문: '어떤 선택을 하시겠습니까?',
choices: array_reduce(
array: $rows,
callback: function($carry, $item) {
$carry[] = $item[0];
$carry를 반환합니다;
}
)
);
$answer = $io->askQuestion($choice);
(...)
결과적으로 동일한 소스에서 테이블 표시가 있는 대화형 선택 필드를 얻게 되었습니다.
민감한 데이터를 제공하는 동안 프롬프트를 숨기는 것은 일반적인 관행이며 다음에서도 쉽게 달성할 수 있습니다. Symfony 콘솔.
다음에서 기본 제공 래퍼를 사용할 수 있습니다. 심포니스타일
클래스에 대한 예제입니다:
(...)
보호된 함수 실행(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$io->title("사용자에게 민감한 데이터를 요청합니다");
$io->askHidden(
question: "여기에 API 키를 입력하세요",
validator: function($answer) { return (42 == strlen($answer)) ?? $answer; }
);
반환 Command::SUCCESS;
}
사용자에게 진행 상황을 알리기 위해 진행률 표시줄을 사용할 수 있습니다. Symfony 콘솔은 사용자에게 진행 상황을 보여줄 수 있는 좋은 방법이지만, 항상 진행 상황 출력의 스타일을 올바르게 지정하는 것을 잊지 마세요. 다음을 사용하여 다양한 부분과 렌더링 방식을 완벽하게 제어할 수 있습니다. 포맷터
. 진행률 표시줄의 형식은 여러 가지 자리 표시자의 문자열일 뿐입니다. 사용 가능한 자리 표시자는 다음과 같습니다: 현재
, 최대
, 바
, 퍼센트
, 경과
, 남은
, 추정
, 메모리
그리고 메시지
. 아래 예시를 참고해 보세요.
(...)
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$io->title("Styled progress bar example");
$progressBar = new ProgressBar($io, 10000);
$progressBar->setFormat('<comment>%current%/%max% [%bar%] %percent:3s%%</comment>
<info>%elapsed:6s%/%estimated:-6s%</info> <error>%memory:6s%</error>');
$progressBar->start();
for ($i = 0; $i < 10000; $i++) {
$progressBar->advance();
usleep(420);
}
$progressBar->finish();
$io->newLine();
return Command::SUCCESS;
}
단말기에서 표시할 수 있는 형식이라면 거의 모든 형식과 포맷터를 사용할 수 있습니다. 공식 Symfony 문서
우리는 개발 생활에서 콘솔 제안, 자동 완성 기능 등에 익숙합니다. 콘솔 애플리케이션을 만드는 경우 사용자가 로우레벨 CLI 솔루션 사용법을 혼동하지 않도록 콘솔 기능을 추가하는 것을 고려해야 합니다. PHP 심포니 콘솔은 다음을 사용하여 바로 이 기능도 제공할 수 있습니다. 완료 입력
클래스.
(...)
public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void
{
if ($input->mustSuggestArgumentValuesFor(argumentName: 'someArgument')) {
$suggestions->suggestValues(['someSuggestion', 'otherSuggestion']);
}
}
Symfony 5.1 는 CLI 애플리케이션에서 커서 위치를 처리하는 새로운 방법을 도입했습니다. 그 이후로 화면의 특정 위치에서 편리하게 읽고 쓸 수 있습니다. 커서
클래스:
(...)
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$io->title("Cursor example");
$cursor = new Cursor($io);
$cursor->clearScreen();
for ($x = 0; $x <= 10; $x++) {
for ($y = 0; $y <= 10; $y++) {
$cursor->moveToPosition($x, $y);
if ($y === $x) {
$io->write(".");
}
}
}
$io->write("Hello, World!");
$io->newLine();
return Command::SUCCESS;
}
이 짧은 목록은 빙산의 일각에 불과합니다. 다음과 같은 가능성이 있습니다. Symfony 콘솔 를 기반으로 하는 Psalm, PHPStan 또는 Composer와 같은 수많은 프로젝트에서 알 수 있듯이, 그 수는 무궁무진합니다. PHP 수백만 명의 PHP 개발자 전 세계에 걸쳐 있습니다.