2011-11-28 7 views
5

Odkryłem wzór "Zaprojektuj według umowy" i jak zaimplementować w PHP. Nie mogę znaleźć prawdziwego przykładu na świecie, jak to zrobić w PHP. Pierwsze pytanie czy robię to we właściwy sposób? Drugi to, dlaczego wywołanie zwrotne assert nie jest honorowane?Czy jest to właściwy sposób implementacji wzorca "Projektuj według umowy" w PHP?

statyczna klasa Asserts do wielokrotnego użytku twierdzeń:

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

Zastosowanie:

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.'); 

jest wyzwalany tylko (z prawej) ostrzeżenie:

Ostrzeżenie: assert() [funkcja .assert]: Asercja "Asserts :: absetOrNotNumeric ($ value)" nie powiodło się.

+0

Jakie ostrzeżenie to uruchamia? –

+0

@Mario zobacz moje zmiany, dziękuję. – gremo

Odpowiedz

4

Twój Wyjątkiem jest wyrzucane, zmieniając go do:

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

wyniki w wyświetlaniu tekstu, niektóre testy odkrywają, że jeśli robisz alte r ta opcja:

assert_options(ASSERT_BAIL,  false); 

Wyjątek zostanie zgłoszony, więc wygląda na to, że czeka na wykonanie przed wyrzuceniem wyjątku.

Nadzieję, że pomaga

+0

Dzięki! Masz rację, rozwiązany. – gremo

Powiązane problemy