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.
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.
Yanıtlar:
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ı .
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 ( __autoload
veya 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 strtolower
ve kullanmayı ve beğenileri unutmak .
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
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
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.
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!