Apakah fungsi PHP case sensitive?


100

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.


1
Tidak, sepertinya tidak. preferensi biasanya menggunakan huruf kecil
Jason

3
Duplikat stackoverflow.com/questions/2749781/… . Tidak, fungsi tidak peka huruf besar / kecil
Bob Baddeley

Untuk referensi: itu terkubur di sini di tengah php.net/manual/en/functions.user-defined.php di blok Catatan : .
mario

3
Saya memilih untuk membiarkan ini terbuka - judulnya jauh lebih umum dan eksplisit, sehingga kemungkinan besar akan membantu lebih banyak orang.
coreyward

Jawaban:


100

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.


3
PHP5 sudah keluar, satu-satunya harapan Anda adalah PHP6 dan saya rasa mereka tidak akan mengambil langkah itu. Itu akan merusak banyak untuk keuntungan kecil.
Mark Tomlin

3
@ Mark Tomlin Saya tidak setuju. Praktik terbaiknya adalah mempertahankan casing yang sama dengan yang dimiliki manual, jadi casing tersebut harus sedikit rusak, sekaligus meningkatkan kejelasan.
Ben Dauphinee

12
Wow. itu menyedihkan. meskipun ImAgEcReAtEfRoMpNg () adalah cara yang bagus untuk mengaburkan kode ...
Pontomedon

8
Karena kutipan mengatakan "case-insensitive", mengapa Anda mengatakan "Jadi sepertinya yang ditentukan pengguna adalah case-sensitive"? Jika itu salah ketik, Anda benar-benar harus memperbaikinya.
Barmar

11
Wow! Ini sangat menyenangkan untuk mengetahuinya setelah 7 tahun pengkodean!
Daan

34

Tidak.

Fungsi PHP tidak peka huruf besar-kecil.


19

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 ( __autoloadatau 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 strtolowerdan sejenisnya.


7

Tidak, mereka tidak peka huruf kapital, namun, Anda harus selalu menggunakan kasing yang ada di manual, untuk konsistensi.

Namun, variabel yang case sensitive.


3

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

2

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

1

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.


Kembali "selamatkan seluruh mimpi buruk mengubah kasus": Tidak, pemahaman saya adalah bahwa jika perubahan pernah dilakukan, sensitivitas huruf akan menjadi pilihan, setel di php.ini. Dengan demikian menjaga kompatibilitas ke belakang.
ToolmakerSteve

-2

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!


1
itu benar-benar buruk ... jika saya pergi ke my-site / myLogInPage / loginsuccess , dan mengambil beberapa tebakan pada apa yang Anda sebut fungsi sukses login Anda, atau saya dapat menghapus beberapa hal ....
Tschallacka
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.