53 votes

Déclarer des types de variables en PHP?

J'ai essayé d'obtenir mon Netbeans pour la saisie semi-automatique avec PHP, et j'ai appris que ce code est valide en PHP:

function blah(Bur $bur) {}

Un couple de questions:

  1. Cette réalité impose aucune limite sur ce type de variable, je peux passer à la bla méthode?
  2. Si c'est juste pour aider les IDE, qui est très bien avec moi. Comment puis-je déclarer le type d'une variable en PHP si je ne suis pas dans une fonction?

78voto

JW. Points 17361

Ce type-hinting ne fonctionne que pour la validation des arguments de la fonction; vous ne pouvez pas déclarer une variable PHP doit toujours être d'un certain type. Cela signifie que dans votre exemple, $bur doit être de type Bur lorsque "bla" est appelé, mais $bur pourraient être réaffectés à un non-Bur valeur à l'intérieur de la fonction.

Type-hinting ne fonctionne que pour la classe ou de l'interface de noms; vous ne pouvez pas déclarer qu'un argument doit être un nombre entier, par exemple.

L'un des aspects ennuyeux de PHP du type-hinting, ce qui est différent de Java, est que les valeurs NULL ne sont pas autorisés. Donc, si vous voulez l'option de passage de la valeur NULL au lieu d'un objet, vous devez supprimer le type de l'indice et de faire quelque chose comme ceci dans le haut de la fonction:

assert('$bur === NULL || $bur instanceof Bur');

EDIT: Ce dernier paragraphe ne s'applique pas depuis PHP 5.1; vous pouvez maintenant utiliser la valeur NULL comme valeur par défaut, même avec un soupçon type.

EDIT: Vous pouvez également installer le SPL Type de Manipulation extension, ce qui vous donne wrapper types pour les chaînes de caractères, entiers, des flotteurs, des booléens, et les énumérations.

EDIT: Vous pouvez également utiliser le "tableau" depuis PHP 5.1, et de "callable" depuis PHP 5.4.

37voto

Jim OHalloran Points 4034
  1. Si vous spécifiez un type de données pour un paramètre de fonction, PHP générera une erreur fatale capturable si vous transmettez une valeur qui n'est pas de ce type. Notez cependant que vous ne pouvez spécifier que des types pour les classes et non des primitives telles que des chaînes ou des entiers.
  2. La plupart des IDE peuvent déduire un type de données à partir d'un commentaire de style PHPDoc, le cas échéant. par exemple
 
/**
 * @var string
 */
public $variable = "Blah";
 

8voto

J Cooper Points 7695

C'est ce qu'on appelle les indicateurs de type, ajoutés avec PHP 5. Ce n'est pas tout à fait ce à quoi vous pouvez vous attendre si vous venez d'un langage comme Java. Cela provoque une erreur si vous ne passez pas dans le type attendu. Vous ne pouvez cependant pas entrer de primitives d'indication de type (no int $ bur).

6voto

Shad Points 41

#2 : (...) Comment puis-je déclarer le type d'une variable en PHP si je ne suis pas dans une fonction?

J'ai récemment entendu parler de "settype()" et "gettype()" en PHP4 et 5
Vous pouvez forcer le type de variable à tout moment facilement


À Partir De PHP.net :

bool settype ( mixte &$var string $type )

Paramètres

var : La variable en cours de conversion. type : valeurs Possibles de type sont:

  • "boolean" (ou, depuis PHP 4.2.0, "bool")
  • "integer" (ou, depuis PHP 4.2.0, "int")
  • "float" (uniquement possible depuis PHP 4.2.0, pour les anciennes versions d'utiliser la variante obsolète "double")
  • "la ficelle"
  • "array"
  • "objet"
  • "null" (depuis PHP 4.2.0)

[ :D Première visite, premier commentaire...]

3voto

Jeremy Ruten Points 59989

Cette réalité impose aucune limite sur ce type de variable, je peux passer à la bla méthode?

Ceci est appelé le type hinting. Selon la documentation de PHP que j'ai un lien, oui, il le fait d'imposer des limites sur le type d'argument: "à Défaut de satisfaire le type de l'indice résultats dans une erreur fatale."

Comment puis-je déclarer le type d'une variable en PHP si je ne suis pas dans une fonction?

Lire le type de jonglage. Vous ne pouvez pas définir explicitement le type d'une variable en PHP, son type est décidé par le contexte, il est utilisé dans.

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