web-dev-qa-db-ja.com

関数とメソッドがPHP大文字と小文字を区別しないのはなぜですか?

PHPの関数とメソッドは、次の例に示すように大文字と小文字を区別しません。

function ag()
{
    echo '2';
}

Ag();
class test {
    function clMe()
    {
        echo 'hi';
    }
}

$instance = new test;
$instance->clme();

しかし、変数の場合はそうではありません。根拠は何ですか?

102
user198729

インタビュー-PHPの作成者、Rasmus Lerdorf から引用させてください

PHPの最初のバージョンは、私が自分のWebサイトといくつかのプロジェクトのためにまとめたツールのシンプルなセットでした。あるツールはmSQLデータベースへのファンシーヒットロギングを行い、別のツールはフォームデータインタープリター.Cで書かれた約30種類の小さなCGIプログラムでうんざりして、それらすべてを1つのCライブラリに結合し、HTMLファイルからタグを選択する非常に簡単なパーサーを作成しましたそれらをCライブラリの対応する関数の出力に置き換えます。

単純なパーサーは、条件タグ、ループタグ、関数などを含むように徐々に成長しました。スクリプト言語を書いているとは思わなかった。マクロ置換パーサーに機能を少し追加するだけでした。私はまだCですべての実際のビジネスロジックを書いていました。

導入されたすべての関数は本質的にHTMLドキュメントのタグのように感じ、HTMLタグは大文字と小文字を区別しないため、彼はPHPの大文字と小文字を区別しない関数名を選択しました。言語で残りました。

90
Shailesh Kumar

はい、関数とメソッドの名前は大文字と小文字が区別されません。

はい、変数名では大文字と小文字が区別されます。

その理由があるのか​​どうかはわかりませんが、長い間このようになっていたことを除いて、後方互換性の理由からそうです。



参考として、マニュアルのさまざまなページへのリンク/引用をいくつか示します。

関数の場合quoting

注:関数名は大文字と小文字を区別しませんが、通常は宣言に現れる関数を呼び出すのが適切な形式です。

そして、メソッドはオブジェクト内の関数以上のものではありません。特にPHP 4と後方互換性について考えるときは。


そして、変数の場合( quoting ):

PHPの変数は、ドル記号とそれに続く変数名で表されます。変数名は大文字と小文字が区別されます。

そして、オブジェクトのプロパティはオブジェクトの変数にすぎません-PHP 4と後方互換性についての同じ意見。

34
Pascal MARTIN