Optimisation: or et and

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Optimisation: or et and

Re: Optimisation: or et and

par Dr@ke » 27 mars 2010, 14:15

Bon ben t'es excusé alors pour le coup du array() :wink:

Re: Optimisation: or et and

par Nagol » 27 mars 2010, 14:12

Ok oui, tu as surement raison.
Donc pour autre chose qu'un type array, string ou objet, il devrait logiquement émettre une erreur, mais en fait non, et assigne de plus un null ensuite...
vi y'a un message d'erreur manquant ici à mon avis, sans doute par oubli plus qu'autre chose.

Re: Optimisation: or et and

par Dr@ke » 27 mars 2010, 14:02

Ok oui, tu as surement raison.
Donc pour autre chose qu'un type array, string ou objet, il devrait logiquement émettre une erreur, mais en fait non, et assigne de plus un null ensuite...

Re: Optimisation: or et and

par Nagol » 27 mars 2010, 13:53

Je pense avoir compris en partie le pourquoi:

En fait ce n'est pas un transtypage ou autre de $row en array(), car si on cast $row -> on a une belle erreur.

Donc, en fait il interprète $row["champ"] comme $row[0], c'est à dire non plus comme tableau mais comme une partie de la variable.

(...)

Aucune erreur, que ce soit: true, false, null, un Int, String.
Car il ne l'interprète pas comme un tableau.

Et donc comme une partie de false -> est égale à null :)
Euh non. il doit probablement regarder en premier le type de la variable $row, si c'est un tableau on va plus loin, si c'est un texte aussi parceque c'est un tableau de char, et si c'est un objet aussi parceque il peut etre énumérable. les autres types étant inutilisables ca default sur null.

représente toi une variable php comme étant une sorte d'objet abstrait contenant entre autre le type de celle ci et sa valeur, l'information la plus rapide à accéder c'est le type (un int avec des constantes pour les rendre plus lisibles) donc pour un parser on va utiliser ça en priorité :)

Re: Optimisation: or et and

par Dr@ke » 27 mars 2010, 13:37

Je pense avoir compris en partie le pourquoi:

En fait ce n'est pas un transtypage ou autre de $row en array(), car si on cast $row -> on a une belle erreur.

Donc, en fait il interprète $row["champ"] comme $row[0], c'est à dire non plus comme un tableau mais comme une partie de la variable.

Exemple:
<?php
error_reporting(-1);
$row = 'abc';
echo $row["champ"]; // retourne: a
var_dump($row["champ"]); // retourne: string(1) 'a'

echo $row[0]; // retourne: a
var_dump($row[0]); // retourne: string(1) 'a'
?>
Aucune erreur, que ce soit: true, false, null, Int, String.
(enfin je crois)
Car il ne l'interprète pas comme un tableau.

Et donc comme une partie de false -> qui est donc égale à null :)

Re: Optimisation: or et and

par Nagol » 27 mars 2010, 13:26

<?php
error_reporting(-1);
$row = false;
echo $row["champ"] . '<br>';
var_dump($row["champ"]); // Retourne: NULL
?>
Je viens de tester comme ceci, et aucune erreur non plus en PHP 5.2.6.

Mais je trouve ça étonnant aussi, je vais tester sur un autre serveur.

[EDIT]
Autre serveur pareille mais aussi en dessous de 5.3.

[EDIT 2]
Version Php: 5.3.2 -> aucune erreur non plus.
Donc en effet, cela peut vraiment prêter a confusion sur le type de la valeur de retour.
(true c'est pareil et donc ils se comportent dans ce cas précis comme si $row = null;)
La seule chose, c'est d'espérer que Php le gère bien, c'est tout.

Sinon, si il y a une explication logique, cela m'intéresserais de la connaitre :wink:
pour un int ou un booléen pas d'erreur, pour les strings/array/object oui, donc manifestement c'est tellement ahurissant qu'il a pas de mots pour l'expliquer :)

Re: Optimisation: or et and

par Dr@ke » 27 mars 2010, 11:23

<?php
error_reporting(-1);
$row = false;
echo $row["champ"] . '<br>';
var_dump($row["champ"]); // Retourne: NULL
?>
Je viens de tester comme ceci, et aucune erreur non plus en PHP 5.2.6.

Mais je trouve ça étonnant aussi, je vais tester sur un autre serveur.

[EDIT]
Autre serveur pareille mais aussi en dessous de 5.3.

[EDIT 2]
Version Php: 5.3.2 -> aucune erreur non plus.
Donc en effet, cela peut vraiment prêter a confusion sur le type de la valeur de retour.
(true c'est pareil et donc ils se comportent dans ce cas précis comme si $row = null;)
La seule chose, c'est d'espérer que Php le gère bien, c'est tout.

Sinon, si il y a une explication logique, cela m'intéresserais de la connaitre :wink:

Re: Optimisation: or et and

par zeus » 27 mars 2010, 11:02

<?php
$row = false;
echo $row["champ"] . '<br>';
Normalement, ce code devrait t'afficher un NOTICE.
Tu utilises quel niveau pour l'affichage des erreurs ?

Re: Optimisation: or et and

par Dr@ke » 27 mars 2010, 08:41

Je regardais mon code vite fait et un détail a attiré mon attention:
        $row = mysql_fetch_array($query) or var_dump($row);
echo $row["champ"] . '<br>';
// var_dump() retourne: bool(false) 
Je me dis tiens c'est bizarre, car le var_dump() ne stop pas l'exécution du script donc pourquoi je ne me rappelle pas avoir eu d'erreur ensuite pour: echo $row["champ"]
Je re-teste et effectivement -> aucune.

Je test donc ceci pour en être certain:
<?php
$row = false;
echo $row["champ"] . '<br>';
var_dump($row["champ"]); // retourne: NULL
?>
Ok , c'est normal -> car aucune erreur non plus, mais je n'avais jamais remarqué...

Ce qui explique peut-être que l'on aurait pu penser que la valeur de retour était toujours un tableau.

Donc en fait, dans la majorité des cas, on a même pas besoin de vérifier si cela nous retourne un résultat.
On sait juste que chaque élément du tableau aura comme valeur: NULL.
Au pire juste un test isset() sur un élément du tableau est suffisant.

Voilà, c'est tout :)

Re: Optimisation: or et and

par AB » 26 mars 2010, 02:02

On essaye la technique de la zen attitude :wink:
Tu devrais cocher "résolu" sur cette bonne réponse :D

Re: Optimisation: or et and

par Dr@ke » 26 mars 2010, 01:44

On essaye la technique de la zen attitude :wink:

Re: Optimisation: or et and

par AB » 26 mars 2010, 01:20

Ben alors si plus personne veut jouer, ça sent la fin du topic :cry:

Re: Optimisation: or et and

par Berzemus » 25 mars 2010, 22:07

d'accord j'ai installé mysql, mais dois-je installer php aussi ou bien je peux le faire avec notepad?
#-o
Ah, vous l'avez provoqué, va falloir faire avec maintenant. :roll:

Re: Optimisation: or et and

par stealth35 » 25 mars 2010, 15:35

d'accord j'ai installé mysql, mais dois-je installer php aussi ou bien je peux le faire avec notepad?
#-o

Re: Optimisation: or et and

par Nagol » 25 mars 2010, 15:31

d'accord j'ai installé mysql, mais dois-je installer php aussi ou bien je peux le faire avec notepad?