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


107

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

function ag()
{
    echo '2';
}

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

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

しかし、それは変数には当てはまりません。根拠は何ですか?


161
PHPには根拠のない根拠は必要ありません!
マックスShawabkeh

2
「スープマンがそう言うから」根拠はありませんが、参照:php.net/manual/en/functions.user-defined.php(例3と4の間)、php.net
manual / en /

2
class Share{ share($str){ echo $str; } } $sh = new Share(); $sh->share("string");関数share($ str)への2つの呼び出しに驚くかもしれません。同じ理由でc'torと2番目の明示的な呼び出しのために最初の1つ!!
vivek.m '19

1
@outis、「スープマン」ってどういう意味?
Pacerier 2014年

1
@outis、あなたはサインフェルドからの「スープナチ」を参照しています。 YouTubeウィキペディア
Kevin Traas、2015年

回答:


98

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

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

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

導入したすべての関数は本質的にHTMLドキュメントのタグのように感じられ、HTMLタグは大文字と小文字を区別しないため、彼はPHPで関数名を大文字と小文字を区別しないように選択したことをどこかで読んだことがあります。後でこの機能は言語で残った。


66
パリでのPHPカンファレンスでのラスマスからの引用も多かれ少なかれ言ったことを覚えています。ある関数名を別の関数名から認識すると、深刻な問題が発生します!」
Tom Desp

1
今後も大文字と小文字が区別されますか?
2014年

4
そのため、phpプログラマーは、関数に名前を付けるときにキャメルケースではなくアンダースコアを使用します。
paperstreet7 2014年

2
@ paperstreet7いくつかはそうします。良いものはしません。少なくとも、もうありません。
Dan

13
@danでは、多くの「優れた」プログラマーがアンダースコアを使用しています。実際、PSR-0はわざと推奨していません。優れたプログラマーは、アンダースコアまたはキャメルケースを選び、その慣習に固執します。その選択を、優れたプログラマーであるかどうかを判断することは、かなりばかげています。
jdp 2015年

34

はい、関数とメソッド名は大文字と小文字を区別しません。

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

その理由があるかどうかはわかりませんが、長い間このように使用されてきたため、下位互換性の理由から、そのままです。



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

関数の場合引用

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

また、メソッドはオブジェクト内の関数にすぎません。特に、PHP 4と下位互換性について考える場合はそうです。


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

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

また、オブジェクトのプロパティは、オブジェクト内の変数にすぎません。PHP4との下位互換性と同じです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.