PHPのお勉強６


全般・メモ・言語の位置づけなど
================================

## テンプレート言語という揶揄の意味・見直されてきた面など

http://modernnomad.net/archives/1001873679.html

改善済みパターン

> * 配列ごときで、arrayの荒らし　→ PHP5.4から[1,2,3]と書けます 
* クロージャーがない　→　PHP5.3で実装されました 
* mixinがない　→ トレイと使えばおｋ 
* いったん変数に代入しないとできないのは地味に不便
両方とも5.4でできるようになってる

仕様ＮＧパターン

> * 引数の順番に統一感がなくリファレンスに頼りがちになる 
* 戻り値が0とfalseを返すものがあり区別が面倒 
> * オーバーロードって、普通メソッドオーバーロードとか演算子オーバーロードって思うよな 
PHPはその辺がトチ狂ってる
> * オーバーロードとは少し違うけど名前付きコンストラクタが自然に書けない 
ファクトリでラップするのもダルいし 
> * PHPにオーバーロードはある 
あるが一般的に言うオーバーロードではない
> * staticメソッドをdynamicにバインドしているだけやろ。 
この場当たり感がPHPだ！
> * 直感的にはselfとstaticが逆
> * 最初からselfが実行時クラスで__CLASS__が定義クラスだったらそんでよかったんだろうけど。

設計ＮＧパターン

> * PHPから緩い比較演算子はなくすべき
> * 配列を参照渡しにしとけばバグらなかった話 
> * 関数の名前や引数がキモい、グローバルにすんな、オブジェクトにしろよ 
> * なんか直交性に欠ける感じなんだよね
> * 他の言語の良いところをパクって作って設計の統一感を失ってるところだな

記述方法や思想
> * OOPに関してPHPが読みやすいということはないっしょ。そもそもPHPって満足にOOPできないし。OOPの機能は充実してるけど、基本的な値に対してOOPを使えないのが致命的。 
str.lengthと書きたいのに、strlen($str)と書かないといけないし。（マルチバイト考慮するならmb_strlen($str)になるのがさらに糞） 
> * 多重継承とミックスインなら、継承とインターフェースとトレイトの方が好き 
前者はis aがすぐ崩れる
> * トレイトと型(インターフェイス)が分かれているのって一見綺麗だけど、トレイトを型安全に書くには両方必要になって面倒(名前どうすればいいだろ…) 
> * PHPは言語定義が甘い
> * adaやc++ほど優れた言語仕様を作ったところで、そんなもの誰も読まないじゃないか

他に負けてるパターン

> * 実行速度面でpython、rubyがぐんぐん改善されてる

改善点

> * facebookはいろいろなコードを寄贈することで今のphpの速度がある 
5.2と5.3の速度の差は、世にhiphopとして出たfacebookのphpのコンパイラによるものが多い 

既成事実・歴史的経緯・流行

> * よく見てみろ。お前の周りはphpのコードだらけだ。
> * 当時は専用サーバーやシェルを解放してるレンタルサーバーは高額で稀で、phpは廉価なサーバーで高速にウェブアプリを動かせた 
> * 信じられない脆弱性やバグが割と最近まであるせいで怖い 
> * もうウェブサイトを一から作るって案件は減ってるのは確か 
ウェブじゃなくて、モバイルのネイティブアプリで展開するケースが増えてる 

文化や開発者

> * ちょっとの手間で素人が「使えた気になる」 
> * サーバのことなんてこれっぽっちも考えない
> * いまだにXSSに言及がないチュートリアルが公開されるところ
> * 初期の頃は機能不足だったり、ライブラリが貧弱だったりしたが、今はもう特別見劣りしないと思う 
> * デザイナー上がりのプログラマーがいたり、ユーザーレベルの平均値は他の言語に比べて低いけど、それは仕方ないだろ 
> * 雑魚でも使えるってすごいことだよな 
たとえそれが悪貨だとしても、雑魚向けの代替環境が鯖屋に普及してないしな 
> * 多言語をdisれるペチパーなんて見たことない 
> * phpは些細なことでもネットで情報共有する文化があるから良い 
> * フレームワークも色んな種類があるし進化も淘汰も速い 
> * ただ洗練された言語構文を知らないままに、全然何もシンタックスシュガーの入ってないPHPが 
当たり前の状態だと思ってる状態が良くないんだ
> * PHPerのレベルが低いかもしれないのはしっかり教育を受けた人間が少ないからだろ
> * よくできたPHPerは他から叩かれる欠点を(それが偏見で欠点でなくても)よく理解した上で活用してるからな 
> * PHPユーザーにプログラミング初心者が多すぎて糞コードが量産されているから悪いイメージがあるだけだと思う 
> * PHPのトレイトは本来の意味を忠実に実装してる分、返って理解されにくいと思う。あと、型とトレイトが分かれてるのもかったるいし、説明しにくい。 
それよりはinterfaceが実装を持てるぐらいの方が良かったなと思う。(Java8はこれを選んだけど)

未知・未来

> * 実装が大変という意味だとphpの最新版も結構当てはまると思うけど、hhvmってどの辺りまでサポートしてるんだろ。

印象・スタンス・位置づけ

> * そうか？他汎用言語のトレンド吸い上げて随分複雑化した印象だけどな 
> * Web特化ツール、って感じじゃね？
> * そもそもphpのnamespaceって、クラス名をディレクトリ階層ぽくできるくらいの意味しかないし、必要最低限と言える。
> * PHPだけで構文解析器ぐらいまで書けるし、 
サーバーやデータベースについてでも学んだ方が有益だから
> * PHPはWebサイトに特化すれば言語中ナンバーワンだ 
コレだけは間違いない 
> * 後は何でもかんでも標準関数で入ってるから、出来ないことはない 
ただし、Cみたいに自分で何でも作れるような実力は付きにくい
> * WEB のサーバー側しか書けないじゃん >PHP 
 組み込み門は無理 
 バックエンドの計算主体系は無理 
 遅いし 
 コンパイラ屑だし

メモ

	516,534,568付近はもうちょっとあとでよんでもいいかも。

> c++やPythonよりHaskellの方が書く効率良さそうだよね 
c++でポリモーフィズムやテンプレート使うと継承や仮想関数について理解する必要できるけど、 
組込開発やUnix方面では殆どcで書くしかないから、cの作法について熟知してる方がマシだし 
Pythonだと毎度ながら変数への代入を間違えて、つまらないデバッグに時間を取られてしまう 
PHPの場合、Haskellが型チェックすることで効率が良くなるようなコードなんて書きそうにない 
仕事でcとPHPを軸にして趣味でHaskell製アプリを書くと、とても幸せになれそう

> 将来のことは分からないから無駄な投機はしない 
ってかぶっちゃけパーサとかコード解析とかならHaskellよりOcamlの方が使いやすい 
その程度の用途にHaskellはぶっ飛びすぎ

> 一番重要なのは、ちょっとぐぐれば大抵のことはわかる言語かどうか 
Yes な言語なら開発者はヘボでもいい 
No な言語ならプロジェクト内で発生する課題一つ一つを自力で解決できるレベルの開発者が必要になる 
この差はでかい

> プログラミング技法の記事って、ほとんど英語で書かれてるわけで 
日本語は盲目に生まれついたのと同じレベルの不幸

http://blog.toshimaru.net/php-is-not-bad-language/

なるほど。納得。PHP The Right Way.みてみる。

> 「そんなこといってもぉ、どんなコード書いたらイケてるとかわかんないしぃ」というスイーツなそこのあなた。PHP The Right Way.を今すぐ嫁。「技術書高ぃしぃ〜、重ぃしぃ〜、いゃ〜」とか「英語とか読めないしぃ〜」とかつべこべ言う前に無料だし日本語版もあるので黙って全部読むべし。

http://ja.phptherightway.com/

とても読みやすいしまとまってるサイト。ボリュームあるけど。別途読む。