web-dev-qa-db-ja.com

PHP関数は大文字と小文字を区別しますか?

いくつかのコードを掘り下げていたところ、mySQL_fetch_array。 PHP関数名について大文字と小文字を区別しますか?これをどこかで読んだことを思い出しますが、それへの参照を見つけることができないようです。

96
Ben Dauphinee

this から引用しています:

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

そのため、ユーザー定義関数は大文字と小文字を区別しないように見えます。PHP5で関数/オブジェクトを大文字と小文字を区別するために vote がありました。

96
SIFE

いいえ

PHP関数はnot大文字と小文字を区別します。

32
mpen

TL; DR:クラス名は大文字と小文字を区別しませんが、常に宣言と同じ大文字と小文字を使用します(関数と同じ)。また、定義された大文字小文字が異なるクラスをインスタンス化すると、オートローダーで問題が発生する場合があります。


また、クラス名では大文字と小文字が区別されません。

_<?php
class SomeThing {
  public $x = 'foo';
}

$a = new SomeThing();
$b = new something();
$c = new sOmEtHING();
var_dump($a, $b, $c);
_

この出力:

_class SomeThing#1 (1) {
  public $x =>
  string(3) "foo"
}
class SomeThing#2 (1) {
  public $x =>
  string(3) "foo"
}
class SomeThing#3 (1) {
  public $x =>
  string(3) "foo"
}
_

問題はオートローダーと大文字と小文字を区別するファイルシステム(ext2/3/4など)を使用していることです。クラスを含むファイルの名前と同じ大文字小文字でクラス名を呼び出す必要があります(クラス名の実際の大文字小文字の区別ではありません)。またはstrtolowerを使用します:

クラスファイル:

_<?php
// filename something.php
class SomeThing {
   ...
}
_

オートローダー関数(___autoload_または_spl_autoload_register_で登録する関数)

_function my_autloader($className) {
  $filename = CLASSES_DIR . DIRECTORY_SEPARATOR . $className . '.php';
  if (file_exists($filename)) {
    require($filename);
  }
}
_

このコードで:

_$a = new something(); // works
$b = new SomeThing(); // does not work
$c = new SOMETHING(); // does not work
_

オートローダーコードにstrtolower()への呼び出しを追加した場合、この作業を行うことができます(つまり、オートローダーを使用して大文字と小文字を区別しないクラス名を効果的に作成できます)が、関数と同様に、宣言と同じ方法で、クラス名と同じ大文字と小文字のファイル名を使用し、オートローダーを使用し、strtolowerなどを使用することを忘れます。

19

いいえ、それらはnot大文字と小文字を区別しますが、一貫性を保つために、マニュアルにある大文字と小文字を常に使用する必要があります。

ただし、変数areは大文字と小文字が区別されます。

7
alex

In PHP変数は大文字と小文字を区別しますが、関数にはこのような問題はありません。出力を表示するために次のステートメントを使用できます。すべて同じ結果が表示されます。

<?php
Echo "This is a test script";
ECHO "This is a test script";
echo "This is a test script";
?>

一方、変数の大文字と小文字の区別を変更すると、エラーが表示されます。

例:

<?php
$a=5;
echo $A;// It will show the error.
?>

出力:

Notice: Undefined variable: A in C:\xampp\htdocs\test.php on line 3
3
atif

また、メソッド名も大文字と小文字を区別しません。例えば:-

<?php
       class C { 

           public function method() { } 

           public function METHOD() { } 
       }

出力:

PHP Fatal error:  Cannot redeclare C::METHOD() in ....php on line 6
2
Habeeb Perwad

全員の応答の結論。 PHPは、PHP5で今まですべてのインスタンスで大文字と小文字の一貫性を必要としませんでした。

ベストプラクティスになります

変数(その「必須」)または関数(「その」オプション、ただし推奨)への参照時に常に同じケースを使用します。

投票がいつか終わるかもしれませんが、PHPでの更新が必要な数年前に作成されたアプリケーションでのケースの変更の悪夢をすべて救うでしょう。

とにかく役立つことを願っています。

1
weia design