|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre régulier
![]() Nicolas Webmaster Inscription : janvier 2008 Messages : 172 ![]() |
Bonjour,
je me pose une question de performance, par exemple tout le monde sait qu'il vaut mieux faire : $date = date("Y:s:i", time()); puis utiliser plusieurs fois $date plutôt qu'executer inutilement plusieurs fois la fonction date() et time() dans cet exemple. Maintenant dans le cas d'un objet avec une résolution de porté : il vaut mieux utiliser plusieurs fois maClass::$objet-> ou le déclarer une fois $objet =& maClass::$objet; puis utiliser plusieurs fois $objet-> En fait j'ai peur que quand je fais maClass::$objet ça fait travailler PHP comme il le ferait avec une fonction() par exemple. Ce que j'espère et qui serait parfais c'est que PHP lit maClass::$objet comme si c'était une simple variable au lieu d'executer tout un tas de chose en fond. Merci pour votre aide. |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Mathieu ROBINDéveloppeur Web Inscription : mai 2006 Messages : 1 116 ![]() |
Oulà ça c'est de la question.
Je t'avouerai qu'autant il y a de sacrés beaux morceaux intéressants concernant l'optimisation du code et des temps d'exécution dans le manuel de la certification, autant cette idée là, je ne me souviens pas l'avoir vue. Personnellement je dirais que : Code php :
$objet =& maClass::$objet;$objet->actions(); Enfin c'est ce qui revient le plus dans les exemples d'utilisation du ZendFramework, je suppose que si ils font ainsi c'est qu'il y a une raison logique. |
|
00
|
|
|
#3 |
|
Membre régulier
![]() Nicolas Webmaster Inscription : janvier 2008 Messages : 172 ![]() |
|
|
|
00
|
|
|
#4 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Salut
Ta syntaxe MaClasse::$object me fait penser à une variable statique, est-ce bien le cas ? Dans l'affirmative, c'est aussi rapide que d'utiliser des références à l'objet. Au passage, je te rappelle qu'en PHP5 tous les objets sont des références, il est donc inutile d'utiliser =& pour l'instanciation. D'ailleurs, si comme tout le monde le recommande tu mets error_reporting=E_ALL|E_STRICT dans php.ini, tu devrais avoir des alertes visuelles à ce sujet
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#5 | |
|
Membre régulier
![]() Nicolas Webmaster Inscription : janvier 2008 Messages : 172 ![]() |
Salut,
à bonne nouvelle ! Bien vue, c'est une variable statique et parfois avec $var =& ...j'ai un message de PHP : Citation:
Donc dans ce cas là aussi c'est inutile ? Je n'avais pas activé l'option E_STRICT, je viens de la rajouter merci. |
|
|
|
00
|
|
|
#6 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Je te recommande de lire la doc à ce sujet, c'est très bien expliqué
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#7 | ||
|
Membre régulier
![]() Nicolas Webmaster Inscription : janvier 2008 Messages : 172 ![]() |
J'ai lu la doc toute l'après midi, du coté de new ça retourne automatiquement une référence depuis PHP5, ça le mérite d'être clair.
Ce post et la lecture de plusieurs chapitres sur les classes et références de la doc de PHP m'ont éclairés ma lanterne. Cependant certains aspects concernant les références sont encore un peu flou. Désolé de faire le moulin à question, j'approche de la compréhension faut pas que je lâche lol A quel moment est-il judicieux d'utiliser une référence ? Ci-dessous ça ne sert à rien de dupliquer le contenu de MaClass::$var1 dans $var2, je pense donc qu'une référence plutôt qu'une copie est judicieux : Code :
Il y a t-il d'autres contextes où les références sont avantageuse ? Merci ! |
||
|
|
00
|
|
|
#8 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Ce que j'essaie de te dire depuis le début, est que depuis PHP5 l'opérateur "=&" est inutile. Il te suffit de faire "=", cela revient exactement au même. Si tu veux un duplicata de l'objet, l'opérateur "=" n'est pas suffisant, tu dois utiliser un clone.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#9 |
|
Membre régulier
![]() Nicolas Webmaster Inscription : janvier 2008 Messages : 172 ![]() |
D'accord merci, j'avais un doute ^^
Dernière question, pour les variables normale $var_string1 = $var_string2; l'opérateur "&=" est inutile en php5 aussi ou la prise en charge automatique des références est seulement valable pour les objets ? |
|
|
00
|
|
|
#10 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Si tu essaies, qu'est-ce que ça donne ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#11 | ||
|
Membre régulier
![]() Nicolas Webmaster Inscription : janvier 2008 Messages : 172 ![]() |
Je vois pas où tu veux en venir
Code :
$This->the_question(?) |
||
|
|
00
|
|
|
#12 | ||||
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Pour voir la différence entre des copies et des références, il faut modifier l'une des variables et afficher l'autre
Code :
Code :
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
||||
|
|
00
|
|
|
#13 | ||||||
|
Membre régulier
![]() Nicolas Webmaster Inscription : janvier 2008 Messages : 172 ![]() |
Ok je voyais pas où tu voulais en venir, désolé et merci pour l'exemple mais tu n'as pas tout à fait compris ma dernière question.
![]() Le résultat est le même ici : Code :
Code :
pour une variable "normale" comme dans ton exemple est-ce inutile aussi ? Code :
|
||||||
|
|
00
|
|
|
#14 |
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Salut,
Je crois que Yogui t'a tout à fait compris et c'est justement ce qu'il te demandait de tester. Pour ma part, je pense que cela ne marche pas pour les chaînes. Pour des raisons techniques et ésotériques, les chaînes sont souvent des cas à part dans le monde des langages informatiques : ce sont souvent des objets passés par valeur. C'est étonnant et c'est un cas à part, mais je sais que c'est le cas en .Net, je crois que c'est le cas aussi en Java, et je ne serais pas étonné que ce soit le cas en php. Enfin, les nombres sont souvent passés par valeur. |
|
|
00
|
|
|
#15 |
|
Membre régulier
![]() Nicolas Webmaster Inscription : janvier 2008 Messages : 172 ![]() |
Désolé pour la réponse tardive ^^
Ok je vois, merci pour la réponse |
|
|
00
|
|
|
#16 | ||
|
Membre Expert
![]() Inscription : janvier 2007 Messages : 1 452 ![]() |
salut,
Je reviens sur ce qui se disait plus haut. N'est ce pas le travail du compilateur que d'optimiser ce genre de code : Code :
et inversement ? Et alors dans quelle mesure cela impacte la rapidité d'execution ? A priori faiblement puisque PHP à un système de cache, non ? Donc finalement, c'est se poser un faux problème que de se demander si telle ou telle syntaxe est la plus efficace ? Merci de vos éclaircissements car désormais j'ai le doute..., bye |
||
|
|
00
|
|
|
#17 |
|
Membre actif
![]() ![]() Inscription : octobre 2006 Messages : 102 ![]() |
Hum... La question de se demander si faire $a =& maClasse::$statique; puis d'utiliser $a n'est pas vraiment stupide dans le sens où la résolution de portée à été calculée une fois, puis stockée dans $a.
Alors dans les utilisations de $a, plus besoin de re-résoudre le chemin vers la variable, donc gain de temps ? |
|
|
00
|
|
|
#18 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
@savageman86 : Oui, c'est bien cela, à la différence que l'opérateur =& n'a plus aucune utilité en PHP5, aucun avantage par rapport à l'opérateur =
@kaymak : Non, PHP n'a pas de cache activé par défaut, il faut que tu choisisses toi-même l'extension de cache que tu veux utiliser.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#19 | ||
|
Membre éprouvé
![]() ![]() Inscription : mai 2008 Messages : 450 ![]() |
il me semble qu'en matiere de performance et de scope la solution suivante est assez interessante.
Code :
Code :
$plus_simple_a_ecrire = global_scope::$variable1 |
||
|
|
00
|
|
|
#20 |
|
Membre actif
![]() ![]() Inscription : octobre 2006 Messages : 102 ![]() |
Vivement les espaces de noms en PHP 5.3 alors ! (même si ce n'est plus trop le sujet initial...).
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com