Aujourd'hui, je vais vous proposer une petite classe utile.
Elle ne révolutionne rien et n'a rien de bien compliquer, je ne m'étendrais donc pas sur les explications.
Objectif
La classe Assert permet de mettre en place le principe des assertions du C++.
Une assertion est un prédicat vérifiant une expression ou des critères devant toujours être rempli au moment où on déclenche la vérification, si le prédicat se revèle faux il faut alors arrêter l'exécution du programme.
Régulièrement dans mon code, j'effectue plusieurs contrôles et si la vérification échoue je lève une exception :
- contrôle du type des variables passées en paramètre des fonctions
- code retour d'un appel de méthode
- présence d'un élément dans un tableau
J'en avais un peu marre de toujours recopier ces contrôles surtout avec le lancement de l'exception, j'ai donc voulu mutualiser ce traitement en reprenant le concpets des Assert() du C++.
La classe Assert
< ?php
class Assert
{
// assertion : @expression is true
public function assertTrue( $expression )
{
if( !$expression ) throw new Exception( 'Error : Variable not defined.');
return true;
}
// assertion : @expression is false
public function assertFalse( $expression )
{
if( $expression ) throw new Exception( 'Error : Variable not defined.');
return true;
}
// assertion : @variable is defined
public function assert( $variable )
{
if( !isset( $variable ) ) throw new Exception( 'Error : Variable not defined.');
return true;
}
// assertion : @variable is defined and is of type @type
public function assertType( $variable, $type )
{
assert( $variable );
switch( $type )
{
case 'int' :
if( !is_numeric( $variable ) ) throw new Exception( 'Error : Variable Type Expected [numeric]');
break;
case 'string' :
if( !is_string( $variable ) ) throw new Exception( 'Error : Variable Type Expected [string]');
break;
case 'array' :
if( !is_array( $variable ) ) throw new Exception( 'Error : Variable Type Expected [array]');
break;
case 'object' :
if( !is_object( $variable ) ) throw new Exception( 'Error : Variable Type Expected [object]');
break;
}
return true;
}
// assertion : @variable is defined and is not of type @type
public function assertNotType( $variable, $type )
{
assert( $variable );
switch( $type )
{
case 'int' :
if( is_numeric( $variable ) ) throw new Exception( 'Error : Variable Type Not Expected [numeric]');
break;
case 'string' :
if( is_string( $variable ) ) throw new Exception( 'Error : Variable Type Not Expected [string]');
break;
case 'array' :
if( is_array( $variable ) ) throw new Exception( 'Error : Variable Type Not Expected [array]');
break;
case 'object' :
if( is_object( $variable ) ) throw new Exception( 'Error : Variable Type Not Expected [object]');
break;
}
return true;
}
// assertion : @variable is defined and is null
public function assertNull( $variable )
{
assert( $variable );
if( !is_null( $variable ) ) throw new Exception( 'Error : Null Value Expected');
return true;
}
// assertion : @variable is defined and is not null
public function assertNotNull( $variable )
{
assert( $variable );
if( is_null( $variable ) ) throw new Exception( 'Error : Null Value Expected');
return true;
}
// assertion : @variable is defined and is of class @name
public function assertClass( $variable, $name )
{
assert( $variable );
if( !is_a( $variable, $name ) ) throw new Exception( 'Error : Class Expected ['.$name.']');
return true;
}
// assertion : @variable is defined and is not of class @name
public function assertNotClass( $variable, $name )
{
assert( $variable );
if( is_a( $variable, $name ) ) throw new Exception( 'Error : Class Not Expected ['.$name.']');
return true;
}
// assertion : @array is defined and contains @value
public function assertInArray( $array, $value )
{
assert( $variable );
if( !in_array( $value, $array ) ) throw new Exception( 'Error : Value ['.$value.'] Expected In Array['.print_r( $array, true ).']');
return true;
}
// assertion : @array is defined and does not contain @value
public function assertNotInArray( $array, $value,)
{
assert( $variable );
if( in_array( $value, $array ) ) throw new Exception( 'Error : Value ['.$value.'] Expected Not In Array['.print_r( $array, true ).']');
return true;
}
}
?>
Les assertions présentent dans cette classe ne sont que des exemples et vous pouvez l'enrichir de tous les contrôles qui vous semblent nécessaires.
Par contre, je vous conseille de toujours définir les assertions par paire opposée.















