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ę.
Jakie ostrzeżenie to uruchamia? –
@Mario zobacz moje zmiany, dziękuję. – gremo