Bir nesne null olup olmadığını hep doğrulamalısınız?

5 Cevap php

Ben url okumak benim parametreleri içeren bir fabrika ile inşa edilmiş bir nesnesi var.

Bu nesne, ben dil parametresini alabilirsiniz

$language = $my_parameters->getLanguage();

Bu set edilmemiş ise $ dil NULL.

$ Dili de geçersiz ($ dil-> isValid () false döndürür) olabilir.

Yani, benim sayfasını oluşturmak için, bazı parametreler lazım.

Sayfası da yalak bir fabrika inşa edilmiştir. Sonra ben bunu oluşturmak gerekiyor hangi parametrelerin biliyorum. Bu parametreler özledim, ben sordum sayfasına göre geçerli bir varsayılan değeri ile inşa.

Bu noktada, sayfa fabrika içine, bir, ben bir istisna geçersiz bir parametre atmak varsa.

Benim sayfa nesnesi dil parametre ihtiyacı vücut nesnesi içerir. Ben vücudumu nesne oluşturmak benim parametrelerinin geçerli olduğunu biliyorum.

Bedenim nesne içine, ben dili almak

$language = $my_parameters->getLanguage();

At this point, $language ** MUST ** be valid. So I verify again

$language = $my_parameters->getLanguage();
if( is_null( $language ) or !$language->isValid() ) {
   throw new Exception( 'Language must be valid.' );
}

Ben 4 parametreleri gerekiyorsa, ben nesne null ve geçersiz değil ise 4 ifs doğrulayın var.

method is public $ dil vücut nesne kullanıldığı yerlerde çünkü ben bunu.

And the body object may be built outside the factory. Kim bilir ...

Bu durumda doğrulamak için doğru mudur?

Bu konuda en iyi uygulamalar nelerdir?

5 Cevap

i etki hakkında çok az şey biliyorum, ama genel durumda, ben genellikle i yerde null bir nesne ile sona çünkü eğer, her yerde (null değil) onun bir hata iddia etmek istiyorum.

genellikle bile olamaz null başvuru türlerini tercih etmek de iyi bir uygulamadır.

C programlama çok eski okuluna gelen; yani benim bir şey değil kullanılıyorsa veya serbest olmuştur değişkenler () 'd her zaman null olmasıdır. Ama bu sadece benim görüşüm.

Bu konuda Edit: Binası, her zaman bir değişken de bunu kullanmadan önce null olup olmadığını görmek için kontrol etmelisiniz. Değişken null ve olmamalı o zaman bir hata giriş yapmalıdır. Çökme özelliği olmamalıdır.

Iki yöntemden içine GetLanguage () bölerek kendiniz için hayatı daha basit yapabilirsiniz:

function getLanguageIfValid() {
  // this method return a Language object, but only if it can be created
  // correctly and the isValid() method returns TRUE. If the Language object
  // can't be created correctly, then it will return null instead.
}

function getLanguageMustBeValid() {
    // this method will always return an instance of Language, or else
    // an exception will be thrown
    if($return = $this->getLanguageIfValid())
        return $return;
    throw new Exception("Couldn't get Language object");
}

Bunu yaptıktan sonra, yerlerde bu ilk yöntemi kullanmak, dil öğesi düzgün oluşturulmuş olabilir söylemek makul olduğu:

// we may or may not be able to get our Language object here
if($language = $my_parameters->getLanguageIfValid())
    do_stuff($language);

Eğer dili nesne oluşturulmalıdır eminseniz, o zaman sizin için istisna atar 2. yöntemini kullanın.

// we know the Language object is created at this point
$language = $my_parameters->getLanguageMustBeValid();
do_stuff($language);

Eğer bir nesne sürece bize boş dönmek değil garantili bir işlev onu almak gibi sıfırlamamaktadır doğrulamak zorunda değilsiniz - Yani sorunun cevabı No olduğunu.

Sizin istisna -> GetLanguage ().

Benim için, istisnaları otomatik olarak atılmalıdır. Ne yapıyorsun hata kodu sağlık kontrolü ve istisna atma bir karışımı gibi görünüyor.