それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

PHP のクラス名とファイル名の対応表を作る。

PHP好きですか?僕は嫌いでも好きでもないです。ただ、PHPプログラマはファイルに適当にクラス生やすので好きになれないです。

PHP’erが クラス名を適当につけるし、ファイル内部にどんどんクラスを作るのでカオスになってきた。

ファイル名とクラス名が対応してない。

クラスを適当に作れるの、作る側は便利だし、歓迎ですよ。でもね歓迎なんだけど、ひとの描いたコードを追いかけるときには、これが逆に何処に何があるかわからないので不便過ぎる。かといって、それだけのためにDocumentorにかけるのも不便なんですよ。

どのファイルにクラスがあるが調べたい。

どこでも、クラスとファイル名の対応表をすぐに作りたいです。そこでコマンドの組み合わせでやってみた。

awkgrepでパパっと。

     grep -r ^\s*class . | sort | awk '{  printf"% 35s",$2; printf "\t"  ; printf $1 ; printf "\n"}'  | cut -d : -f 1

コマンドって美しいですねぇ。いやー便利。

実行結果。

ほらね。簡単にクラス名とファイル名の対応表が出来る。さぁ、これで道標が出来た。他人の作ったソースコードを読もう。

                         SimplePage     ./vendor/simpletest/page.php
                      ParallelRegex     ./vendor/simpletest/php_parser.php
                    SimpleHtmlLexer     ./vendor/simpletest/php_parser.php
                SimpleHtmlSaxParser     ./vendor/simpletest/php_parser.php
                        SimpleLexer     ./vendor/simpletest/php_parser.php
               SimplePhpPageBuilder     ./vendor/simpletest/php_parser.php
                   SimpleStateStack     ./vendor/simpletest/php_parser.php
                           Recorder     ./vendor/simpletest/recorder.php
            SimpleResultOfException     ./vendor/simpletest/recorder.php
                 SimpleResultOfFail     ./vendor/simpletest/recorder.php
                 SimpleResultOfPass     ./vendor/simpletest/recorder.php
                   SimpleReflection     ./vendor/simpletest/reflection_php4.php
                   SimpleReflection     ./vendor/simpletest/reflection_php5.php
                     RemoteTestCase     ./vendor/simpletest/remote.php
                       HtmlReporter     ./vendor/simpletest/reporter.php
                    NoSkipsReporter     ./vendor/simpletest/reporter.php
                  SelectiveReporter     ./vendor/simpletest/reporter.php
                       TextReporter     ./vendor/simpletest/reporter.php
                   MultipleReporter     ./vendor/simpletest/scorer.php
                     SimpleReporter     ./vendor/simpletest/scorer.php
            SimpleReporterDecorator     ./vendor/simpletest/scorer.php
                       SimpleScorer     ./vendor/simpletest/scorer.php
                         SimpleById     ./vendor/simpletest/selector.php
                      SimpleByLabel     ./vendor/simpletest/selector.php
                SimpleByLabelOrName     ./vendor/simpletest/selector.php
                       SimpleByName     ./vendor/simpletest/selector.php
                      ShellTestCase     ./vendor/simpletest/shell_tester.php
                        SimpleShell     ./vendor/simpletest/shell_tester.php
                   SimpleStackTrace     ./vendor/simpletest/simpletest.php
                         SimpleTest     ./vendor/simpletest/simpletest.php
                  SimpleTestContext     ./vendor/simpletest/simpletest.php
                   SimpleFileSocket     ./vendor/simpletest/socket.php
                 SimpleSecureSocket     ./vendor/simpletest/socket.php
                       SimpleSocket     ./vendor/simpletest/socket.php
                  SimpleStickyError     ./vendor/simpletest/socket.php
               MultipleSelectionTag     ./vendor/simpletest/tag.php
                    SimpleAnchorTag     ./vendor/simpletest/tag.php
                      SimpleBaseTag     ./vendor/simpletest/tag.php
                    SimpleButtonTag     ./vendor/simpletest/tag.php
                SimpleCheckboxGroup     ./vendor/simpletest/tag.php
                  SimpleCheckboxTag     ./vendor/simpletest/tag.php
                      SimpleFormTag     ./vendor/simpletest/tag.php
                     SimpleFrameTag     ./vendor/simpletest/tag.php
               SimpleImageSubmitTag     ./vendor/simpletest/tag.php
                     SimpleLabelTag     ./vendor/simpletest/tag.php
                    SimpleOptionTag     ./vendor/simpletest/tag.php
               SimpleRadioButtonTag     ./vendor/simpletest/tag.php
                   SimpleRadioGroup     ./vendor/simpletest/tag.php
                 SimpleSelectionTag     ./vendor/simpletest/tag.php
                    SimpleSubmitTag     ./vendor/simpletest/tag.php
                          SimpleTag     ./vendor/simpletest/tag.php
                   SimpleTagBuilder     ./vendor/simpletest/tag.php
                     SimpleTagGroup     ./vendor/simpletest/tag.php
                  SimpleTextAreaTag     ./vendor/simpletest/tag.php
                      SimpleTextTag     ./vendor/simpletest/tag.php
                     SimpleTitleTag     ./vendor/simpletest/tag.php
                    SimpleUploadTag     ./vendor/simpletest/tag.php
                       SimpleWidget     ./vendor/simpletest/tag.php
                    LiveTestOfForms     ./vendor/simpletest/test/acceptance_test.php
           SimpleTestAcceptanceTest     ./vendor/simpletest/test/acceptance_test.php
                  TestOfFileUploads     ./vendor/simpletest/test/acceptance_test.php
          TestOfFrameAuthentication     ./vendor/simpletest/test/acceptance_test.php
                TestOfLinkFollowing     ./vendor/simpletest/test/acceptance_test.php
           TestOfLiveAuthentication     ./vendor/simpletest/test/acceptance_test.php
                  TestOfLiveBrowser     ./vendor/simpletest/test/acceptance_test.php
                  TestOfLiveCookies     ./vendor/simpletest/test/acceptance_test.php


大規模コードリーディングとかそういう本を読むのもいいですね。でもできることから始めよう。