いくつかのコードを調べていたところ、への呼び出しがいくつか見つかりましたmySQL_fetch_array
。PHPは関数名について大文字と小文字を区別しますか?私はどこかでこれを読んだことを思い出しますが、それへの参照を見つけることができないようです。
いくつかのコードを調べていたところ、への呼び出しがいくつか見つかりましたmySQL_fetch_array
。PHPは関数名について大文字と小文字を区別しますか?私はどこかでこれを読んだことを思い出しますが、それへの参照を見つけることができないようです。
回答:
私はこれから引用しています:
注:関数名は大文字と小文字が区別されませんが、通常、宣言にあるとおりに関数を呼び出すのが適切です。
そのため、ユーザー定義関数では大文字と小文字が区別されないように見え、PHP5で関数/オブジェクトを大文字と小文字を区別するように投票されました。
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
ます。
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
みんなの反応の結論です。にもかかわらず、PHPは、PHP5でも、今までのすべてのインスタンスの文字ケースの一貫性を必要としません。
ベストプラクティスは
変数(その必須)または関数(そのオプションですが、推奨)を参照する場合は常に同じケースを使用します。
いつか投票が成立したことを知らないので、数年前に作成されたアプリケーションでPHPの更新が必要なケースを変更するという悪夢をすべて救うことができます。
とにかくそれが役に立てば幸い。
遅すぎるかもしれませんが...
PHPエンジンは文字の大文字小文字を区別しません。
そして、PHPバグトラッカーへの投票があり、大多数は「はい、私はプロのケースセンスです」と述べています。
しかし、私はMTRAフレームワークでコントローラーアクションを呼び出すので、私は反対です:
$currentController = new $controller($parameters);
$currentAction = $currentController->{$action}();
$ controllerと$ actionはそのままURLから取得されます。
ユーザーが私のサイトへのリンクを公開した場合、考えてみてください。 https:// my-site / MyPartnerController / MyPartnerGallery
クラスの名前がmyPartnerControllerである間...
これは、PHPのクラスと関数名で大文字と小文字が区別される場合、誰もこのページを取得しないことを意味します。
はい、宣言されているとおり、コードでは常にすべての名前を使用します。ただし、関数やクラスの名前で大文字と小文字が区別されないようにしてください。
ありがとうございました!