PHPを使うべきでない2つの理由
PHPの開発者として、私はPHP4、PHP5での最初の(オプションの!)GC実装、そしてPHP7と...の出現のハイプの日々をまだ覚えている。
 
                
この記事は、symfony コンソール開発に関するもっとも便利で検索しやすいヒントとトリックをお見せする目的で作成されました。
もしあなたが PHP 開発者 あなたの PHP ソフトウェア開発 を次のレベルに引き上げたいあなたのための記事です。本題に入ろう。
よく耳にする言葉だ:
PHPはウェブページの作成にのみ使用される
というのも、現在ではこのようなことはあり得ないからだ。 PHP開発 はさまざまなビジネス分野で使われているが、一見するとそれほど些細なことではないことが多い。
どちらも PHP 言語とその環境はHTTP通信を完璧にサポートしており、CLI環境の使用と合わせて、ウェブボットやウェブクローラ、外部環境のデータを同期するツールを素早く作成することができる。
これを裏付ける統計として、コンソールのコンポーネントが以下のようになる。 symfonyフレームワークコマンドラインに簡単にアクセスでき、最も使用され、ダウンロードされたTOP5に入っている。 シンフォニー 史上最高のパッケージ

この時点で、私たちはすべての人が知っておくべきいくつかのトリックを紹介したいと思う。 PHP開発者 書くときに知っておくべきこと コード で PHP CLIで動作することになっている。

エントリーを選択できるテーブル・レンダリングは、以下の方法で簡単に実現できる。 シンフォニー 命令だ:
// src/App/Command/TestCommand.php
    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $io = new SymfonyStyle($input, $output);
        $io->title("Interactive selection table example");
        $table = $io->createTable();
        $table->setHeaderTitle("Interactive selection table example");
        $table->setRows(iterator_to_array($this->tagsTableRows()));
        $table->render();
        $io->newLine();
        return Command::SUCCESS;
    } 
上記の例では PHP発電機 将来のスケーラビリティに役立ちます。上記の例の簡単なデータジェネレーター:
    protected function tagsTableRows():ジェネレータ
    {
        $apiTagsResponse = $this->someInjectedService->getTags();
        foreach ($apiTagsResponse as $apiTagResponse) { $apiTagResponse
            yield [ $apiTagResponse->getName(), $apiTagResponse->getId() ];
        }
    }最終結果は、CLIでレンダリングされた表である。

インタラクティブにするためには、QuestionHelperを使う必要があります。 シンフォニースタイル を出力した。
  (...)
    $choice = 新しいChoiceQuestion(
        question: 'どの選択肢を選びますか?
        choices: array_reduce(
            配列:$rows、
            callback: function($carry, $item) { { $carry[] = $item.
                $carry[] = $item[0];
                return $carry;
            }
        )
    );
    $answer = $io->askQuestion($choice);
   (...)その結果、同じソースからテーブル表示のあるインタラクティブな選択フィールドを得ることができた。

機密データを提供する一方でプロンプトを隠すことは一般的な慣行であり、次のような方法で簡単に実現できる。 シンフォニー コンソール。
の組み込みラッパーを使用できます。 シンフォニースタイル クラスは、次のような例がある:
  (...)
    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $io = new SymfonyStyle($input, $output);
        $io->title("Asking user for sensitive data");
        $io->askHidden(
            question:"APIキーをここに入力してください"、
            validator: function($answer) { return (42 == strlen($answer)) ??$answer; }.
        );
        return Command::SUCCESS;
    }
進捗状況をユーザーに伝えるために、プログレス・バーを使うことができる。 シンフォニー Consoleはユーザーに進捗を表示する素晴らしい方法を持っていますが、常に進捗出力を正しくスタイルすることを忘れないでください。様々な部分とそのレンダリング方法は フォーマッタ.プログレスバーの書式は、異なるプレースホルダーの文字列だけです。利用可能なプレースホルダは以下の通りです: 現在, マックス, バー, パーセント, 経過, 残り, 推定, メモリー そして メッセージ.下の例を参考にいじってみてください。
(...)
    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;
    }端末が表示できるものであれば、フォーマッターとしてほとんど何でも使うことができる。公式 シンフォニー ドキュメンテーション

私たちは開発生活の中で、コンソールのサジェストやオートコンプリート機能などに慣れています。もしコンソール・アプリケーションを作成するのであれば、ユーザーが低レベルのCLIソリューションの使い方に戸惑わないように、それを追加することを検討すべきです。 PHP symfony コンソールは箱から出してすぐに 完了入力 クラスである。
(...)
    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開発者 世界各地で。
