Geçmişte birkaç kez gerçekte yaptığım sıradan bir programlama hatası nedeniyle ayarlayıcının kasıtlı olarak kırıldığı aşağıdaki kodu düşünün:
<?php
class TestClass {
private $testField;
function setField($newVal) {
$testField = $newVal;
// deliberately broken; should be `$this->testField = $newVal`
}
function getField() {
return $this->testField;
}
}
$testInstance = new TestClass();
$testInstance->setField("Hello world!");
// Actually prints nothing; getField() returns null
echo $testInstance->getField();
?>
$testField
Sınıfın en üstünde ilan ettiğim gerçeği, programlama hatasını benden gizlemeye yardımcı oluyor. Alanı bildirmemiş olsaydım, bu betiği çağırdıktan sonra hata günlüğüme yazdırılan aşağıdaki uyarıya benzer bir şey alırdım, bu da hata ayıklamama yardımcı olmak için değerli olurdu - özellikle de böyle bir hata yapacak olsaydım büyük ve karmaşık bir gerçek dünya uygulaması:
PHP Bildirimi: Tanımsız özellik: TestClass :: 13. Satırda /var/www/test.php dosyasında $ testField
Deklarasyonda uyarı yok.
Belki de bir şey eksik ama PHP sınıf alanları ilan etmek sadece iki nedenden farkındayım: beyanlar bildirimleri kalmadan tek bir kullanamazsınız, ikincisi belgelere görevi görür ve bu, öncelikle private
ve protected
vardır erişim düzenleyiciler, tartışmasız faydalı. İkinci argüman kamu alanları için geçerli olmadığından - bir nesnenin kayıt dışı bir alanına atanması onu herkese açık hale getiriyor - bana öyle geliyor ki en azından tüm kamu alanı beyanlarımı yorumlamalıyım. Yorumlar tam olarak aynı belge değerini sağlayacak, ancak başlatılmamış bir alanı okumaya çalışırsam uyarılardan faydalanacağım.
Bununla birlikte, daha fazla düşünce üzerine, orada durmak mantıklı görünmüyor. Deneyimime göre, başlatılmamış bir alanı okumaya çalışmak, özel veya korunan bir alanı uygunsuz bir şekilde okumaya veya değiştirmeye çalışmaktan çok daha yaygın bir hata nedeni olduğundan (eski olanı kısa programlama kariyerimde zaten birkaç kez yaptım, ancak asla ) bana öyle geliyor ki, sadece kamuya açık olanları değil, tüm alan bildirimlerini yorumlamak en iyi uygulama olacaktır.
Beni tereddüt ettiren, kodlarında başka kimsenin bunu yapmadığını hiç görmedim. Neden olmasın? Farkında olmadığım sınıf alanlarını beyan etmenin bir faydası var mı? Ya da gerçek alan bildirimlerini kullanabilmek ve yine de "Tanımsız özellik" uyarılarından yararlanabilmek için PHP'nin yapılandırmasını alan bildirimlerinin davranışını değiştirmek için bir şekilde değiştirebilir miyim? Yoksa analizimde kaçırdığım başka bir şey var mı?
TRUE === $variable
Kendinizi, karşılaştırma yapmak yerine yanlışlıkla atamaktan alıkoymak gibi .