2019年6月16日日曜日

PHPどうにも駄目な理由

出稼ぎ先で「もうPHP使いたくないです」と言ってからはや3ヶ月。
かなり試行錯誤したお陰で、PHPの弱点が明確に判った。

先月書いたエントリとも重複する。
とはいえこれらが問題になるのは、1000行以上の処理を書くようになってからだろう。
数行でレスポンスを繰り返すなら問題はほとんど表面化しない。

クラス定義がコンパイル時なのに<紛い物のOOP
ソース結合がランタイムであること<依然として「歯ブラシ
そのためにシンボル結合がランタイム+文字列であること

端的に言えば、スペルミスすら動かしてみないと判らない、ということだ。

オブジェクト指向を名乗っておきながら
メソッドの定義はクラスの内側に書くしか無い<オブジェクト指向をやりたければ必然ファイルが長くなる
ファイル分割するならトレイトを使うしか無い<後発の言語には大概拡張メソッドがある
にもかかわらずモジュール結合はランタイム。

クラスメンバ変数の初期化の方法が少ない。
getter setterの構文が存在しない<マジックメソッドは実行時結合。あんなものは機構とは言わない。

コンストラクタで書くのが一般的だが、引数が増えれば増えるほど順序間違いを防ぐの非常に困難になる。
変数への代入をタイプミスしても、エラーにならないどころか勝手に定義されてしまう。

ジェネリックが無い。
PHPの基本型はどうかんがえても連想配列である。
クラスは前述の通り非常に扱いが不便だからだ。オブジェクト指向なんて嘘っぱちだ。
にもかかわらず、連想配列の中身を担保する方法が存在しない。

これらはC言語の延長線上のようなコーディングをするなら全く問題にならない。
複雑なオブジェクト指向を書こうとすると途端にあれこれ邪魔になる。
しかしそんなもので開発効率があがるわけがない。

では、10年前にヤフー等がPHPを採用した理由は何だったのか?
見てご覧よこの得意げなタイトルを。ドヤ顔が見えるようだ。顔知らんけど。

PHPとYahoo!の意外なカンケイ - Yahoo! JAPAN Tech Blog https://techblog.yahoo.co.jp/web/auctions/phpyahoo/

テキトーに書いてもある程度まで処理継続してくれる。それによる試行錯誤だろう。
それ以上を期待すると途端に裏切られる。現に、今ではJava/kotlinを採用してるようだ。

Yahoo!カレンダーがPHPからKotlinに技術移行し品質アップ! 成功の鍵とは?【デブサミ2018 関西】 (1/2):CodeZine(コードジン) https://codezine.jp/article/detail/11144

なぜYahoo!カレンダーはPHPからKotlinへ技術移行を進めるのか / Devsumi 2018 KANSAI A-4 https://www.slideshare.net/techblogyahoo/yahoophpkotlin-devsumi-2018-kansai-a4-117060700

ヤフーにおけるJava事情を軽くご紹介します - Yahoo! JAPAN Tech Blog https://techblog.yahoo.co.jp/bb/yahoo-java-usage-introduction/