Déclarer des types de variables en PHP?

j'ai essayé d'obtenir mes Netbeans pour autocomplete avec PHP , et j'ai appris que ce code est valide en PHP:

function blah(Bur $bur) {}

quelques questions:

  1. est-ce que cela impose réellement des limites sur quel type de variable je peux passer à la méthode blah?
  2. si c'est juste pour aider L'IDE, ça me va. Comment puis-je déclarer le type de variable en PHP Si Je ne suis pas dans une fonction?
42
demandé sur Community 2008-12-24 09:57:12

5 réponses

cette indication de type ne fonctionne que pour valider les arguments de fonction; vous ne pouvez pas déclarer qu'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 peut être réaffecté à une valeur non-Bur à l'intérieur de la fonction.

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

un aspect ennuyeux de L'indication de type de PHP, qui est différente de celle de Java, est que les valeurs nulles ne sont pas autorisées. Donc si vous voulez l'option de passer NULL à la place d'un objet, vous devez supprimer le type-hint et faire quelque chose comme ça en haut de la fonction:

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

EDIT: de 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 aussi installez l'extension SPL Type Handling , qui vous donne les types de wrapper pour les chaînes, les ints, les flotteurs, les booléens et les enums.

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

EDIT: Vous pouvez également utiliser la chaîne "string", "int", "float" et "bool" depuis la version 7.0.

65
répondu JW. 2016-11-28 12:06:31
  1. en spécifiant un type de données pour un paramètre de fonction, PHP lancera une erreur fatale récupérable si vous passez 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 inférer un type de données à partir d'un commentaire de style PHPDoc si un tel commentaire est fourni. par exemple

/**
 * @var string
 */
public $variable = "Blah";
26
répondu Jim OHalloran 2008-12-29 05:02:28

on l'appelle type hinting, ajouté avec PHP 5. Ce n'est pas tout à fait ce à quoi vous vous attendez si vous venez d'un langage comme Java. Il ne cause d'une erreur si vous ne passez pas dans le type attendu. Vous ne pouvez pas taper-hint primitives, cependant (pas int $bur).

7
répondu J Cooper 2008-12-24 07:03:15

#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 étant convertie. type: les valeurs Possibles de type sont:

  • "boolean" (ou, depuis PHP 4.2.0, "bool")
  • "integer" (ou, depuis PHP 4.2.0, "int")
  • "float" (seulement possible depuis PHP 4.2.0, pour les versions plus anciennes utiliser la variante dépréciée "double")
  • "string"
  • "array"
  • "objet"
  • " null "(depuis PHP 4.2.0)

[: d première visite, premier commentaire...]

6
répondu Shad 2008-12-24 14:46:39

est-ce que cela impose réellement des limites sur quel type de variable je peux passer à la méthode blah?

cela s'appelle Type faisant allusion à . Selon la documentation PHP à laquelle je viens de faire référence, oui, elle impose des limites au type d'argument: " ne pas satisfaire à l'indication de type entraîne une erreur fatale récupérable. "

Comment puis-je déclarer le type de variable en PHP Si Je ne suis pas dans une fonction?

Lire type jonglage . Vous ne pouvez pas définir explicitement le type D'une variable en PHP, son type est déterminé par le contexte dans lequel elle est utilisée.

3
répondu Jeremy Ruten 2008-12-24 07:10:22