Descubrí el patrón "Diseño por contrato" y cómo implementarlo en PHP. No puedo encontrar un ejemplo del mundo real de cómo hacer esto en PHP. Primera pregunta ¿lo estoy haciendo de la manera correcta? El segundo es ¿por qué no se respeta la devolución de llamada?¿Es esta la forma correcta de implementar el patrón "Diseño por contrato" en PHP?
Una clase estática Asserts
para aseveraciones reutilizables:
class Asserts
{
public static function absentOrNotNumeric($value)
{
return !isset($value) ? true : is_numeric($value);
}
}
Uso:
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.');
Sólo el aviso (derecha) se activa:
Advertencia: assert() [Función .assert]: Aserción "Asserts :: absetOrNotNumeric ($ value)" failed.
¿Qué advertencia provoca? –
@Mario ver mis ediciones, gracias. – gremo