Je comprends que PHP est une langue faiblement typée. Ma question est la suivante: sur l'équilibre, est-il souhaitable d'initialiser les variables de PHP en tant que types spécifiques, compte tenu des préoccupations de sécurité et d'efficacité? Ou serait-ce que cela nageait inutilement contre la marée?
Exemples d'initialisations spécifiques: P>
$name = (string) "PHP"; // string $pizzaToppings = array("tomato", "cheese", "pepperoni"); // array $angle = (integer) 60; // integer
4 Réponses :
Vous ne devriez pas vous inquiéter des types, PHP les fera si nécessaire, lorsque vous devez utiliser les types lors du calcul, les validera en utilisant trois === (type de comparaison spécifique) qu'ils sont toujours valides comme ce type de Connectez-les au type souhaité si nécessaire
$numberofpizzas = $_POST['number']; $price = 16; $totalprice = $price * (int)$numberofpizzas
Michael, je veux éviter la frappe dynamique et éviter la nécessité de tester le type plus tard. Je préfère contrôler le type moi-même plutôt que de laisser ceci à php. Je ne sais pas si cela cause cependant des goulots d'étranglement.
Alors contrôlez-le via des littéraux. PHP n'est pas une langue que vous pouvez définir le type de variables. Si vous n'aimez pas cela, passez à .NET
Par définition, il ne fonctionne pas le même entre chaque type. Il est conseillé de conserver le même type pendant le cycle de vie du programme afin d'éviter des valeurs incorrectes.
$val = false // (int) $val => 0 $val = 0.0010 // (int) $val => 0
Oui, j'aime chaque variable de rester au même type, c'est pourquoi je les ai déclarés types spécifiques. Je veux éviter la frappe dynamique.
C'est une très bonne pratique. Cependant, forcer le type d'une variable n'est pas possible dans PHP
Vous avez des méthodes is_int ou is_float pour vérifier le type avant le processus
PHP doit toujours connaître le "type actuel" d'une valeur avant de pouvoir l'utiliser à n'importe quel but, y compris l'initialisation d'une variable. Ce "type actuel" est la métadonnée (une énumération) qui va avec toutes les valeurs.
Dans votre code d'exemple, les moules n'ont pas de sens parce que vous initialisez des variables à l'aide de valeurs littérales, qui sont toujours du type évident: P> la même chose va pour l'entier et le tableau. P> Il y a au moins un cas où le type de la variable serait autre que vous pourriez attendre à première vue à première vue : p> dans ce cas à l'aide d'une distribution ferait $ i code> un entier, mais cela changerait également sa valeur: P>
$i = (int)(PHP_INT_MAX + 1);
echo gettype($i); // "integer"
echo $i; // a very large negative number -- what?!?
Certaines fonctions renvoient des fichiers de données "mixtes", c'est-à-dire que cela pourrait renvoyer booléen "false" pour l'échec et l'entier "0" comme une valeur de retour valide.
Lors de la vérification des valeurs de retour, il est parfois nécessaire d'utiliser === Comparsion dans afin d'obtenir les résultats corrects. p>
Prenez cet exemple: p>
$s = 'Test'; $c = strpos($s, 'T'); // The letter 'T' is at the first position, at index 0 if (false == $c) ... // evaluates to "true" because of the weak type comparsion of "0" and "false" if (false === $c) ... // evaluates to "false"