Revision 3 as of 2010-12-14 04:20:44

Clear message
Locked History Actions

php/horibble

phpはヒドイ

phpのプログラムは本当にヒドイ。ヒドイ理由は二つある。

  • phpプログラムを書いてるやつがヒドイ
  • phpの言語仕様がヒドイ

以下、この二つの面から検証してみる。

phpプログラムを書いてるやつがヒドイ

phpプログラムを記述している者は、ほとんどがプログラミングの基礎的知識も持ちあわせていない、ド素人ばかりである。 これはもちろん私の経験上というだけの話であるが、しかし友人の話を聞いてみても、皆が皆口を揃えて言うのだから間違い無いところであろう。

どのようにヒドイかと言えば。。。。(これから記述予定)。

phpの言語仕様がヒドイ

メンバ変数・関数にアクセスするためには、必ず$this->を記述する必要がある

  • $a = 1; // ※1 function sample() { // ※2 } class Test {
    • private $a; function test() {
      • $a = 2; sample();
      } function sample() { }
    }

などとし、test関数を呼び出すと、「private $a」には何も代入されない。 そうではなく、この場合グローバル変数である※1の$aに代入されてしまう。 Testクラス内のメンバー関数内でメンバー変数にアクセスするためには「$this->a = 2;」とする必要があるのである。

もし※1が定義されていない場合にtest()関数内で「$a = 2;」とすると、test()関数内のローカル変数が勝手に生成されてしまう。

また、「sample();」も同様に、メンバー関数ではなく、※2を呼び出してしまう。 正しくは「$this->sample();」としなければならない。

このように、phpの「クラス」なるものは、およそスコープというものがデタラメなのである。

変数が勝手に作成されてしまう

さらに、「$this->」をつけていても、問題の発生する場合がある。 上記の例で、宣言されていない変数を参照することができてしまうのである。 つまり、「$this->abc = 2;」とすると、勝手にクラスのメンバとしてabcが宣言されてしまい、エラー等は発生しない。 このため、せっかくメンバ変数の宣言機能があるにも関わらず、何の役割も果たしていないと言ってよい。

メンバ関数の方はさすがに勝手に宣言するわけにはいかないので「$this->hello();」などとするとエラーが発生してしまう。