Bonjour,
bien que ce soit facultatif, il est normalement possible de typer les paramètres attendus d'une fonction ou méthode, comme par exemple en Java.
Exemple :
class Foo{}
class Bar
{
public function __construct(Foo $foo){}
}
class Plop
{
public function __construct(string $text){}
}
$myBar = new Bar(new Foo());
$myPlop = new Plop("Hello world !");
$myBar, pas de souci. Mais $myPlop, erreur :
Catchable fatal error: Argument 1 passed to Plop::__construct() must be an instance of string, string given.
En gros chaque fois que le type défini est une classe utilisateur, pas de souci, mais si c'est un type simple, erreur.
Une idée ?
Merci d'avance !
# Typage
Posté par Raphaël G. (site web personnel) . Évalué à 2.
Je te conseille la lecture de ceci :
http://fr.php.net/string
Et le modèle objet de php5 (sur le 4 c'est une vaste blague) :
http://fr.php.net/manual/en/language.oop5.php
ps : dans la pratique en modèle objet tu ne précise le prototype que pour les classes personnelles, car pour les string et int par exemple ça ne marche pas !
[^] # Re: Typage
Posté par santos . Évalué à 2.
j'ai lu les pages en question (que je connaissais déjà^^)
Justement, ce que je cherche, c'est une solution pour spécifier des types simples (int, string)...
ça serait quand-même dingue que ça ne soit pas possible !
[^] # Re: Typage
Posté par Raphaël G. (site web personnel) . Évalué à 2.
La seule solution est d'ajouter du if(!is_string($arg)) new Exception(''); dans les fonctions.
Regarde sinon du côté des interfaces.
Il me semble que les int marchaient il me semble, mais pas les string.
Une autre solution est de regarder dans le bugtracker php et de poster un bug si tu ne trouves pas.
[^] # Re: Typage
Posté par santos . Évalué à 2.
Merci pour l'info en tous cas.
# Ma solution
Posté par santos . Évalué à 2.
Si un paramètre de méthode est de type simple, je ne spécifie pas son type dans le prototype de la méthode :
public function plop($str)
Par contre en début de méthode je vérifie le type du paramètre :
Utils::checkType('string', $str);
Compatible avec n'importe quel type simple ou classe utilisateur ; déclenche une exception si le type de la variable fournie n'est pas celui attendu.
Inversement, si un paramètre de méthode est une instance de classe (système ou utilisateur), je spécifie la classe attendue dans le prototype :
public function plop(MonType $object)
Par ailleurs, je peux récupérer le type d'un paramètre :
Utils::getParameterType(ReflectionParameter $param);
Si $param est de type simple, la méthode retourne null ; sinon, elle retourne le nom de la classe correspondante.
[^] # code de Utils::checkType() et Utils::getParameterType()
Posté par santos . Évalué à 2.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.