zakkiのブログ

IT関連などの雑記のブログです

PHPはダメな言語のように言われるけど地味に便利だったりする



PHPはダメな言語のように言われるけど地味に便利だったりする


本質的に見ると、確かに、でたらめに作られてしまった言語ではあるのだけども、意外と便利な点も多い。


結果的に、便利になってしまったというべきかもしれない。


例えば、変数など


PHPでは、変数名に$を付けるため、関数名と重複しない。

$を付けない言語では、関数名と変数名の重複が起こりめんどくさい。

PHPに慣れてから、$を付けない言語に戻ると、このことを忘れていて、昔ながらの、くだらない失敗をしてしまうことがある。


同じように、インスタンス変数やメソッドには、$this->がつくので、その他の変数や関数と見分けがつきやすいのもある。


さらに、クラス変数やクラス関数やクラス定数の場合は self::がつくので見分けやすい。


名前空間の定義が厳密


Rubyだと、名前空間の定義があいまいなため、わけのわからないエラーが発生することがある。


PHPは厳密なので、それが起きない。


いろいろ改善されるため、いつの間にか便利になっている


最初は原始的な言語だったけど、

いつの間にか、

privateが追加されたり、

try構文が追加されたり、

名前空間が追加されたり、

タイプヒントが追加されている。


ただし、traitは不要だったと思う。


メモリ


オートロードを使うことで、意外とメモリの節約もできる。


スレッドセーフを意識しないでいいので楽だし安全(多分だけど)


Rubyの場合は、クラス変数は、リクエストごとに独立していない。

けど、PHPは、たしか独立していたはず。


ここは結構あいまいなので、詳しくはこちら参照。

zakkinoblog.hatenablog.com


だれか、安心できる答えを教えてほしい。


レンタルサーバ


たいていのレンタルサーバーで標準で利用できる。


結果的に、スーパーマンになってしまった


例えば、他の言語の場合は、何か実装したいときに、誰かが、ライブラリーを作っていない場合が多いけど、phpの場合は、たいていは、誰かが作っている。


その結果、何でもできるスーパーマンになってしまった。


厳密な構造を作れる


例えば、RubyPythonは、privateや定数の扱いが曖昧なため、厳密な構造は作れない。


そのため、クラスや定数の構造上の保証が確保できない。


つまり、RubyPythonだと、実質的には、

全てのコードをチェックして、クラスや定数がどのような扱いをされているか確認するか、

運よく問題なく動作することを期待するしかなくなる。


つまり、RubyPythonだと、正確に対処する場合は、grepを常に多用し続けないといけなくなる。

そうなってくると、長い名前の定数名やメソッド名を使うほうが、楽に運用できてしまうことになる。ただ、そうしてしまうと、実装が美しくなくなるため、若干のフラストレーションがたまることになる。


実は、PHPができた直後は、


すごく便利な言語だった。


サーバーサイドとPCの違いはあるので、ちょっと例えとしてはよくないかもしれないけど、

例えば、VBで、フォルダ内の一覧を取得するとなると、APIを読み込んで、面倒な実装をしないといけなかった。


PHPだと、それが1行で済むので、とても楽だった。


つまり、その当時、必要だったけど、なかったり、あっても実装が面倒な機能を、とりあえず、簡単に使える形に、ちゃんぽんにしたのが、PHPという言語。


だから、できた当時は、とても画期的な言語ではあった。

必要なものがなかったり、あっても利用が難しい言語しかないときに、

とりあえず、必要なものが、なんとかそろっている言語という感じだった。


さらに、当時のWEB系の言語の中では、比較的高速に動作していて、かつ、簡単に実装できた。