Saya sedang menggali beberapa kode, dan saya menemukan beberapa panggilan ke mySQL_fetch_array
. Apakah PHP case sensitive tentang nama fungsi? Saya ingat pernah membaca ini di suatu tempat tetapi tidak dapat menemukan referensi apa pun tentangnya.
Saya sedang menggali beberapa kode, dan saya menemukan beberapa panggilan ke mySQL_fetch_array
. Apakah PHP case sensitive tentang nama fungsi? Saya ingat pernah membaca ini di suatu tempat tetapi tidak dapat menemukan referensi apa pun tentangnya.
Jawaban:
Saya mengutip dari ini :
Catatan: Nama fungsi tidak peka huruf besar / kecil, meskipun biasanya merupakan bentuk yang baik untuk memanggil fungsi seperti yang muncul dalam deklarasinya.
Jadi, sepertinya fungsi yang ditentukan pengguna tidak case-sensitive, ada pemungutan suara untuk membuat fungsi / objek di bawah PHP5 case-sensitive.
TL; DR: nama kelas tidak peka huruf besar / kecil, tetapi selalu menggunakan huruf yang sama seperti di deklarasi (sama dengan fungsi). Selain itu, membuat instance kelas dengan kasus yang berbeda seperti yang ditentukan dapat menyebabkan masalah dengan pemuat otomatis.
Selain itu, nama kelas peka huruf besar kecil:
<?php
class SomeThing {
public $x = 'foo';
}
$a = new SomeThing();
$b = new something();
$c = new sOmEtHING();
var_dump($a, $b, $c);
Output ini:
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"
}
Masalahnya adalah menggunakan pemuat otomatis dan sistem file case-sensitive (seperti ext2 / 3/4), di mana Anda harus memanggil nama kelas dengan kasus yang sama dengan nama file yang berisi kelas (bukan bagaimana nama kelas sebenarnya ditutup), atau gunakan strtolower
:
File kelas:
<?php
// filename something.php
class SomeThing {
...
}
Fungsi autoloader ( __autoload
atau fungsi untuk mendaftar spl_autoload_register
)
function my_autloader($className) {
$filename = CLASSES_DIR . DIRECTORY_SEPARATOR . $className . '.php';
if (file_exists($filename)) {
require($filename);
}
}
Sekarang dengan kode ini:
$a = new something(); // works
$b = new SomeThing(); // does not work
$c = new SOMETHING(); // does not work
Anda dapat membuat ini berfungsi (yaitu memiliki nama kelas yang tidak peka huruf besar / kecil secara efektif menggunakan pemuat otomatis) jika Anda menambahkan panggilan ke strtolower()
dalam kode pemuat otomatis, tetapi seperti halnya fungsi, lebih baik mereferensikan kelas dengan cara yang sama seperti yang dideklarasikan, memiliki nama file dengan kasus yang sama dengan nama kelas, gunakan pemuat otomatis, dan lupakan penggunaan strtolower
dan sejenisnya.
Dalam PHP variabel case sensitive tetapi fungsi tidak memiliki masalah seperti ini. Anda dapat menggunakan pernyataan berikut untuk menampilkan keluaran, semua akan menunjukkan hasil yang sama.
<?php
Echo "This is a test script";
ECHO "This is a test script";
echo "This is a test script";
?>
Di sisi lain, jika Anda akan mengubah sensitivitas huruf variabel maka itu akan menunjukkan kesalahan.
Contoh:
<?php
$a=5;
echo $A;// It will show the error.
?>
Keluaran:
Notice: Undefined variable: A in C:\xampp\htdocs\test.php on line 3
Dan nama metode juga tidak peka huruf besar / kecil. misalnya:-
<?php
class C {
public function method() { }
public function METHOD() { }
}
keluaran:
PHP Fatal error: Cannot redeclare C::METHOD() in ....php on line 6
Sebagai kesimpulan dari tanggapan semua orang. Meskipun PHP tidak memerlukan konsistensi huruf besar-kecil di semua contoh bahkan sampai sekarang di PHP5.
Praktik terbaik adalah
selalu gunakan kasus yang sama saat merujuk kembali ke variabel ('wajib') atau fungsi ('opsional, tetapi disarankan).
Anda tidak pernah tahu mungkin suatu hari pemungutan suara berhasil dan Anda akan menyelamatkan seluruh mimpi buruk dari kasus perubahan dalam aplikasi Anda yang dibuat beberapa tahun yang lalu yang membutuhkan pembaruan dalam PHP.
Semoga ini membantu.
Mungkin ini sudah terlambat, tapi ...
Semua orang sudah tahu di sini: mesin PHP tidak peduli dengan kasus huruf.
Dan ada pemungutan suara pada bugtracker PHP, di mana mayoritas mengatakan: "Ya, saya pro case sensetivity".
Tapi saya kontra, karena dalam kerangka MVC saya, saya menyebut tindakan pengontrol:
$currentController = new $controller($parameters);
$currentAction = $currentController->{$action}();
$ controller dan $ action diambil dari URL apa adanya.
Pikirkan, jika pengguna memublikasikan link ke situs saya: https: // my-site / MyPartnerController / MyPartnerGallery
sementara kelas bernama myPartnerController ...
Artinya tidak ada yang akan mendapatkan halaman ini jika kelas dan nama fungsi PHP peka huruf besar kecil.
Ya, saya selalu menggunakan semua nama dalam kode seperti yang dideklarasikan. Tapi saya berdoa agar mereka tidak pernah membuat nama fungsi dan kelas peka huruf besar kecil.
Terima kasih!