74 votes

Type-indice de PHP à des valeurs primitives?

Je voudrais savoir si on peut dactylographier une méthode pour s'attendre à des types primitifs?

Quelque chose comme ça:

public function someMethod(string $str)

ou

private function anotherMethod(int $num)

de la même manière que vous le feriez

private function otherMethod(Person $rambo)

est-ce possible en php?

Merci d'avance

88voto

afuzzyllama Points 3826

PHP 5 introduit type hinting. Les fonctions sont maintenant en mesure de forcer les paramètres à être des objets (en spécifiant le nom de la classe dans le prototype de fonction), les interfaces, les tableaux (depuis PHP 5.1) ou remboursables (depuis PHP 5.4). Toutefois, si une valeur NULL est utilisée comme valeur de paramètre par défaut, il sera admis comme un argument pour tout appel ultérieur.

Si la classe ou de l'interface est spécifié comme type de conseil alors tous ses enfants ou des implémentations sont aussi permis.

Type de conseils ne peut pas être utilisé avec des types scalaires tels que int ou string. Les Traits ne sont pas autorisés.

Référence: http://php.net/manual/en/language.oop5.typehinting.php

29voto

Rafe Kettler Points 29389

Nan. Vous ne pouvez pas taper l'indice pour les primitives car PHP a des conversions automatiques pour les primitives. Voir http://bugs.php.net/bug.php?id=29508 . Cela ne changera jamais, à moins que l'équipe de PHP ne change soudainement de cœur (ce qui est douteux, elle est plutôt têtue).

6voto

TCB13 Points 943

Tout le monde a déjà dit, vous ne pouvez pas faire de ce type de soupçon pour les primitives parce que PHP fais pas en charge. La raison derrière ce n'est pas seulement lié à la conversion automatique, mais aussi à la réaction de la communauté.

Jusqu'à présent, je me souviens qu'en Mai 2010 pour un type scalaire allusion a été ajouté à l'PHP tronc. Mais à cause de la réponse de la communauté à cette fonctionnalité ne pas le faire dans la version 5.4.

Il y avait un peu de controverse à ce sujet. Ceux qui s'opposent à la modification a fait valoir que ce soutien serait aller à l'encontre du concept de base de PHP. PHP est considéré comme un faible tapé la langue. En substance, cela signifie que PHP ne vous oblige pas à déclarer des types de données. Les Variables ont encore des types de données associés avec eux, mais vous pouvez le faire radicale des choses comme l'ajout d'une chaîne en entier sans qu'il en résulte une erreur.

Mon humble avis: un type Scalaire allusion doit être ajouté en PHP le plus tôt possible, c'est une option que nous avons tous besoin, j'ai beaucoup de respect que PHP est faible tapé la langue, mais pour le haut de gamme du développement et de la production, spécialement sur OO contextes, type scalaire indicateur est un must. Nous pouvons avoir les deux alternatives en PHP, tout comme de procédure et OO.

1voto

Luc M Points 4950

Selon la documentation de PHP, les conseils de type ne sont pas pris en charge pour les types primitifs.

Il est cependant supporté pour les classes et les interfaces.

Edit: j'ai oublié de mentionner qu'il est également pris en charge pour les tableaux.

0voto

À la recherche de quelque chose de similaire a trouvé cette page, car toutes les réponses ne répondaient pas à mes besoins, créaient une petite pièce de code. J'espère que cela aidera tout le monde qui va frapper cette page de google: P

Mon type safe et allusion au wrapper des types PHP

À votre santé

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X