Enum java-like typage fort

Contenu du snippet

Comment faire un enum en php ?

http://fr.php.net/manual/en/language.oop5.php#73929
ici on pouvait trouver une solution qui semblait correcte et simple, mais le typage de cette solution semble gennant pour faire des fonctions comme :

public function JourDeLaSemaine_Is_WeekEnd(Day $jour)

on doit alors avoir un element de l'enum qui a un "instanceOf" correct !

ici, vous avez un enum java-like c'est a dire que :
un enum est un nouveau type a part entiere
un enum est un objet, il peut contenir d'autres fonctions
on ne peut pas "construire" un enum.

Source / Exemple :


<?php
error_reporting(E_ALL);

class EnumException extends Exception{}

class Enum{
	public function __construct(){
		$array=func_get_args();
		$this->className=$className=$array[0];
		$contentClass=$array[1];
		$this->element=array();
		$count=count($array);
		eval('
			class '.$className.' extends Enum {
				public function __construct($i=0, $string=\'\'){
					if (self::$nbr>='.$count.'){
						throw new EnumException(\'On ne peut declarer un nouvel element dans un enum !\');
					}
					$this->content=$i;
					$this->toString=$string;
					self::$nbr++;
				}
				public function __toString(){
					return $this->toString;
				}
				'.$contentClass.'
				private $content;
				private static $nbr=2;
				private $toString;
			}
		');
		for ($i=2;$i<$count;$i++){
			$this->element[$i]=new $className($i-2, $array[$i]);
			$this->$array[$i]=&$this->element[$i];
		}
	}
	private $element;
}

$a=new Enum('enumTest', 'public function aboyer(){ echo \'test\'; } ', 'black', 'white', 'green');

echo $a->black;
echo '<hr />';
echo $a->white;
echo '<hr />';

$a->white->aboyer();

if ($a->white instanceOf enumTest){
	echo 'instance';
}

$b=new EnumTest();

?>

Conclusion :


ici, l'exception est lancee histoire de montrer qu'on ne peut pas lancer l'enum.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.