2011-11-28 16 views
5

"Sözleşme ile tasarım" desenini ve PHP'de nasıl uygulanacağını keşfettim. Bunu PHP'de nasıl yapılacağına dair gerçek bir dünya örneği bulamıyorum. İlk soru ben doğru şekilde yapıyorum? İkincisi niçin iddia geri çağırma onurlandırılmıyor?Bu, PHP'de "Tasarım sözleşmesiyle" deseninin uygulanmasının doğru yolu mu?

yeniden iddialar için statik sınıf Asserts:

class Asserts 
{ 
    public static function absentOrNotNumeric($value) 
    { 
     return !isset($value) ? true : is_numeric($value); 
    } 
} 

Kullanımı:

assert_options(ASSERT_ACTIVE, true); 
assert_options(ASSERT_BAIL,  true); 
assert_options(ASSERT_WARNING, true); 
assert_options(ASSERT_CALLBACK, array('UseAsserts', 'onAssertFailure')); 

class UseAsserts 
{ 
    private $value; 

    public function __construct($value) 
    { 
     // Single quotes are needed otherwise you'll get a 
     // Parse error: syntax error, unexpected T_STRING 
     assert('Asserts::absentOrNotNumeric($value)'); 
     $this->value = $value; 
    } 

    public static function onAssertFailure($file, $line, $message) 
    { 
     throw new Exception($message); 
    } 
} 

// This will trigger a warning and stops execution, but Exception is not thrown 
$fail = new UseAsserts('Should fail.'); 

Sadece (sağ) uyarı tetiklenir:

Uyarı: assert() [işlevi .assert]: Assertion "Asserts :: absetOrNotNumeric ($ value)" başarısız oldu.

+0

Hangi uyarı tetikler? –

+0

@Mario, düzenlemelerimi gör, teşekkürler. – gremo

cevap

4

, bunu değiştirerek:

public static function onAssertFailure($file, $line, $message) 
{ 
    echo "<hr>Assertion Failed: 
    File '$file'<br /> 
    Line '$line'<br /> 
    Code '$code'<br /><hr />"; 
} 

sonuç metnin bir ekranında, bazı testler siz değiştirirseniz keşfeder. buna istisna atma öncesi yürütme kurtaran görünüyor böylece istisna atılmaz edilecektir

assert_options(ASSERT_BAIL,  false); 

bu seçenek r.

Yardım bu yardımcı olur

+0

Teşekkürler! Haklısın, çözüldü. – gremo

-1

Kodunuz: http://codepad.org/y10BlV8m

Kodum: http://codepad.org/slSX3HKd

çift tırnak kullanmayı deneyin: assert("Asserts::absentOrNotNumeric($value)"); İstisna atılıyor

+1

Yine hayır, “assert” tek tırnak işareti gerektirir, bkz. PHP web sitesinde [assert] (http://php.net/manual/en/function.assert.php) örneği. – gremo

İlgili konular