Optimisation: or et and

Mammouth du PHP | 985 Messages

25 mars 2010, 13:52

Sinon merci pour la participation tout de même, notamment Steal et Calimero...
Car le truc du while($truc= 'machin')
Cela je l'ai compris pendant ce Topic et seul je ne l'aurais pas compris si vite, ça c'est certain :wink:
Bref, ++
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
ViPHP | 3300 Messages

25 mars 2010, 14:26

écrire du code mécaniquement parceque php marche comme ça généralement, c'est pas défendable,
Heu, je parle pas de mécanique mais de ré-utilisation des acquis. Cela n'empêche pas de consulter la doc, ni de faire des cas particuliers.
je suis d'accord que c'est la bonne façon de faire dans 90% des cas (tester l'erreur plutot que la réussite c'est très sain et infiniment plus logique) seulement un while c'est un if, mais un if qui boucle jusqu'à ce qu'on le break ou que la condition passe à false, on ne devrait jamais écrire while((something) == true) parceque ca n'a aucun sens tout simplement.
Moi je te parle d'un
while((assertion) !== false)
rien à voir
ben si ca a à voir, ca n'a aucun interet de faire while((assertion) !== false) parceque ca équivaut à while((assertion)) et pour les raisons que j'évoquais, c'est quoi la différence selon toi?
Fait du php depuis que ca existe ou presque :)

ViPHP
ViPHP | 3300 Messages

25 mars 2010, 14:32

paltemps, pis j'ai pas utilisé mysql avec php depuis plus longtemps encore que mere T, travailler avec des webservices c'est beaucoup plus fun, surtout quand on code aussi le webservice :)
je m'en doutais alors je le fait pour toi
$link   = mysql_connect('127.0.0.1', 'root');  
$query  = mysql_query('SELECT COLLATION_NAME FROM information_schema.COLLATIONS LIMIT 2') or exit(mysql_error());
       
var_dump(mysql_fetch_assoc($query));
var_dump(mysql_fetch_assoc($query));
var_dump(mysql_fetch_assoc($query));


/*
array(1) {
  ["COLLATION_NAME"]=>
  string(15) "big5_chinese_ci"
}
array(1) {
  ["COLLATION_NAME"]=>
  string(8) "big5_bin"
}
bool(false)
*/
ca marche pas ton code, dois-je installer mysql pour que ca marche?
Fait du php depuis que ca existe ou presque :)

Mammouth du PHP | 985 Messages

25 mars 2010, 15:00

Pour ceux qui veulent tester, c'est très simple:

1 - créer une table
2 - aucune données
3 - :
	$sql = 'SELECT * FROM `table`';
	$query = mysql_query($sql) or die('Erreur');
        $row = mysql_fetch_assoc($query) or var_dump($row);
echo $row["champ"] . '<br>';
// var_dump() retourne: bool(false) 
Oui mais le mysql_fetch_array ? :twisted:

Ok ok ok:
	$sql = 'SELECT * FROM `table`';
	$query = mysql_query($sql) or die('Erreur');
        $row = mysql_fetch_array($query) or var_dump($row);
echo $row["champ"] . '<br>';
// var_dump() retourne: bool(false) 
=;
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
ViPHP | 5462 Messages

25 mars 2010, 15:13

ca marche pas ton code, dois-je installer mysql pour que ca marche?
#-o

ViPHP
ViPHP | 3300 Messages

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?
Fait du php depuis que ca existe ou presque :)

ViPHP
ViPHP | 5462 Messages

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

ViPHP
ViPHP | 4039 Messages

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:
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

ViPHP
AB
ViPHP | 5818 Messages

26 mars 2010, 01:20

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

Mammouth du PHP | 985 Messages

26 mars 2010, 01:44

On essaye la technique de la zen attitude :wink:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
AB
ViPHP | 5818 Messages

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

Mammouth du PHP | 985 Messages

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 :)
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

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 ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 985 Messages

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:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
ViPHP | 3300 Messages

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 :)
Fait du php depuis que ca existe ou presque :)