PHP işlevleri büyük / küçük harfe duyarlı mıdır?


101

Bazı kodları araştırıyordum ve bazı aramalar buldum mySQL_fetch_array. PHP, işlev adları konusunda büyük / küçük harfe duyarlı mıdır? Bunu bir yerde okuduğumu hatırlıyorum ama ona herhangi bir referans bulamıyorum.


1
Hayır görünmüyorlar. tercih genellikle küçük harftir
Jason

3
Stackoverflow.com/questions/2749781/… dosyasının kopyası . Hayır, işlevler büyük / küçük harfe duyarlı değildir
Bob Baddeley

Referans için: burada ortada php.net/manual/en/functions.user-defined.php içinde gömülüdür Not: blok.
mario

3
Bunu açık bırakmak için oy kullanıyorum - başlık çok daha genel ve açık, bu nedenle daha fazla insana yardım etme olasılığı yüksektir.
42'de

Yanıtlar:


100

Ben aktarıyorum bu :

Not: İşlev adları büyük / küçük harfe duyarlı değildir, ancak işlevlerin bildirimlerinde göründükleri gibi çağırılması genellikle iyi bir biçimdir.

Dolayısıyla, kullanıcı tanımlı işlevler büyük / küçük harfe duyarlı değil gibi görünüyor, PHP5 altında büyük / küçük harf duyarlı işlevler / nesneler yapmak için bir oylama vardı .


3
PHP5 zaten çıktı, tek umudunuz PHP6 ve bu adımı atacaklarını sanmıyorum. Küçük bir kazanç için çok kırılırdı.
Mark Tomlin

3
@Mark Tomlin Katılmıyorum. En iyi uygulama, kılavuzda olduğu gibi aynı durumu korumaktır, bu nedenle anlaşılırlığı artırırken çok az kırılmalıdır.
Ben Dauphinee

12
vay. Bu üzücü. ImAgEcReAtEfRoMpNg () kodu
gizlemenin

8
Alıntı "büyük / küçük harfe duyarlı değil" dediğine göre, neden "Kullanıcı tanımlı gibi görünüyor, büyük / küçük harfe duyarlı" diyorsunuz? Bu bir yazım hatası ise, gerçekten düzeltmelisiniz.
Barmar

11
Vaov! Bunu 7 yıllık kodlamadan sonra öğrenmek gerçekten çok güzel!
Daan

35

Hayır.

PHP işlevleri büyük / küçük harfe duyarlı değildir .


19

TL; DR: sınıf adları büyük / küçük harfe duyarlı değildir, ancak her zaman bildirimdeki ile aynı durumu kullanın (işlevlerle aynı). Ayrıca, tanımlandıkları gibi farklı durumlara sahip sınıfların başlatılması, otomatik yükleyicilerde sorunlara neden olabilir.


Ayrıca, sınıf adları büyük / küçük harf duyarlıdır:

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

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

Bu çıktılar:

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"
}

Sorun, otomatik yükleyiciler ve büyük / küçük harfe duyarlı dosya sistemleri (ext2 / 3/4 gibi) kullanıyor, çünkü sınıf adını, sınıfı içeren dosyanın adıyla aynı durumla çağırmanız gerekiyor (sınıf adının gerçekte nasıl olduğu değil), veya şunu kullanın strtolower:

Sınıf dosyası:

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

Otomatik yükleyici işlevi ( __autoloadveya kaydolmak için bir işlev spl_autoload_register)

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

Şimdi bu kodla:

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

Otomatik strtolower()yükleyici koduna bir çağrı eklediyseniz (yani, büyük / küçük harf duyarlı olmayan sınıf adlarının bir otomatik yükleyici kullanarak etkili bir şekilde kullanılması) bu işi yapabilirsiniz , ancak işlevlerde olduğu gibi, bildirildiği gibi bir sınıfa başvurmak daha iyidir, sınıf adıyla aynı büyük / küçük harfe sahip dosya adına sahip olmak, otomatik yükleyicileri kullanmak strtolowerve kullanmayı ve beğenileri unutmak .


7

Hayır, büyük / küçük harfe duyarlı değildirler , ancak tutarlılık için her zaman kılavuzdaki büyük / küçük harf kullanımını kullanmalısınız.

Ancak değişkenler büyük / küçük harfe duyarlıdır.


3

PHP'de değişkenler büyük / küçük harfe duyarlıdır ancak işlevlerin böyle bir sorunu yoktur. Çıktıyı görüntülemek için aşağıdaki ifadeleri kullanabilirsiniz, hepsi aynı sonucu gösterecektir.

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

Öte yandan, değişkenlerin büyük / küçük harf duyarlılığını değiştirirseniz, o zaman hatayı gösterecektir.

Misal:

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

Çıktı:

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

2

Yöntem adları da büyük / küçük harfe duyarlı değildir. Örneğin:-

<?php
       class C { 

           public function method() { } 

           public function METHOD() { } 
       }

çıktı:

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

1

Herkesin cevabının sonucu olarak. Olsa PHP PHP5 bile bugüne kadar tüm durumlarda küçük harf tutarlılık gerektirmez.

En iyi uygulama olacak

Değişkenlere ('zorunlu) veya işlevlere (isteğe bağlıdır, ancak önerilir) geri dönerken daima aynı durumları kullanın.

Belki bir gün oylamanın geçeceğini asla bilemezsiniz ve birkaç yıl önce yapılan uygulamalarınızda PHP'de güncelleme gerektiren değişen durumların tüm kabusunu kurtaracaksınız.

Umarım yine de yardımcı olur.


Yeniden "değişen vakaların tüm kabusunu kurtarın": Hayır, benim anlayışıma göre, eğer değişiklik yapılırsa, büyük / küçük harfe duyarlılık php.ini'de ayarlanmış bir seçenek olacaktır. Böylece geriye dönük uyumluluk korunur.
ToolmakerSteve

-2

Belki çok geç, ama ...

Burada herkes zaten biliyordu: PHP motoru harflerin durumunu önemsemez.

Ve PHP bugtracker'da çoğunluğun söylediği bir oylama var: "Evet, ben pro durum duyarlılığıyım".

Ama kontra ediyorum çünkü MVC çerçevemde denetleyici eylemi diyorum:

    $currentController = new $controller($parameters);
    $currentAction = $currentController->{$action}();

$ controller ve $ action URL'den olduğu gibi alınır.

Bir kullanıcı siteme bir bağlantı yayınlarsa düşünün: https: // my-site / MyPartnerController / MyPartnerGallery

sınıf myPartnerController olarak adlandırılırken ...

PHP'nin sınıfları ve işlevlerinin adları büyük / küçük harfe duyarlıysa, bu hiç kimsenin bu sayfayı kazanmayacağı anlamına gelir.

Evet, koddaki tüm isimleri her zaman belirtildiği gibi kullanırım. Ancak, işlev ve sınıf isimlerini asla büyük / küçük harfe duyarlı hale getirmemelerine dua ediyorum.

Teşekkür ederim!


1
bu gerçekten kötü ... siteme / myLogInPage / loginsuccess'e gidip oturum açma başarısı işlevi olarak adlandırdığın birkaç tahminde bulunsam ya da birkaç şeyi silebilirdim ....
Tschallacka
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.