Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/08/2007, 14h22   #1
Invité de passage
 
Inscription : août 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 7
Points : 2
Points : 2
Par défaut [POO] Concaténation de String, lequel est le plus "rapide" ?

Bonjour à tous,

Partant du principe que dans une boucle concaténer des pseudo-String (PHP oblige) avec la bonne vieille methode du "." n'était pas l'idéal ni le plus optimisé, je me suis lancé dans la rédaction d'un objet StringBuilder a la manière de Java.

Malgré tout je manque d'infos pour savoir quel serait la méthode la plus rapide afin de concaténer des strings (Il faut rester dans l'objectif qu'il peut y avoir vraiment beaucoup de string a concaténer)

En commencant à coder je suis tomber sur plusieurs solutions:
-Soit je stocke chaque string dans un tableau (je bénéficie donc de l'indexation du tableau), pour tout rassembler a la fin. (Cela peut poser des soucis d'optimisation de certaine methode tel que l'ajout d'un char pour une position dans la chaine globale, mais c'est une autre histoire)
-Soit dans ma fonction de concaténation je fais comme suit: $string .= $appendstring (Qui doit etre plus optimisé que: $string = $string . $appendstring)
Mais du coup je me dit que faire une classe pour ca n'est pas forcément utile, sauf pour des question de pratique pour réutilisé l'objet plus tard.
-Soit j'utilise la methode str_pad, qui peut me donné des erreurs dans le cas du comptage de la longueur du string (avec les caractère spéciaux notamment)
-Soit il existe deja un buffer et je suis passé a coté
-Soit je laisse tombé

Enfin bref, vous avez compris globalement je pense. C'est quoi qui serait le mieux pour concaténer des strings?
Donaldinou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 15h26   #2
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
J'ai toujours concatener avec le .= ou le . ...
Au pire,
Code :
$chaine = sprintf('%s%s', $chaine1, $chaine2);
Mais jsuis pas certain de l'interet...
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 15h28   #3
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
de mon coté j'ai du mal à croire que
soit plus rapide que
Code :
$string = $string . $suite;
A mon avis c'est optimisé par l'interpréteur PHP ou dans le code natif généré derrière.
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 16h53   #4
Invité de passage
 
Inscription : août 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 7
Points : 2
Points : 2
Citation:
Envoyé par koopajah
de mon coté j'ai du mal à croire que
soit plus rapide que
Code :
$string = $string . $suite;
A mon avis c'est optimisé par l'interpréteur PHP ou dans le code natif généré derrière.
Si seulement !
Le problème (et l'avantage ^^) avec le PHP c'est que c'est un langage "poubelle " (rien de péjoratif) pas typé qui a été créé pour une multitude de dev. Du coup y'a plusieurs manière de faire une seule chose, et cela n'est pas tout a fais gérer de la même manière derrière.
Bon je vais pas m'éterniser non plus sur les différents bench fait par différentes personnes (par exemple celui-ci : http://www.vulgarisation-informatiqu...imiser-php.php) mais on remarque bien que selon la manière d'agencer le code il y aura des gains de performances ou de clarté.

Bon pour être plus précis en fait je vais avoir quelque chose du style:
Code :
1
2
3
4
5
6
7
8
9
10
11
 
boucle for ou autre {
        $string = $var1 . $var2 . $var3 . 'machin bide';
        //condition
                $string .= $var;
       //fin condition
       $string = 'yeaaaahou' . $var366665;
       //condition
                $string = substr_replace($string, $wvar, '', $length);
       ...
} //fin boucle
Mon string est créé mais je ne vais pas l'utiliser maintenant (Pas d'echo ou de print si vous préféré ^^), mais peux vite devenir assez long a excecuter. Donc je me suis demandé si des gens ne s'étaient pas amuser a faire une classe "buffer" pour optimisé tous ca (Comme en Java, C# ou autre langage POO un peu typés on a les Objet StringBuffer ou StringBuilder).

J'ai trouver quelques trucs mais cela ne me convenait pas trop ^^.
Mais bon c'est pas grave, j'ai pris un choix selon mes besoins. Certainement pas le plus optimisé mais le mieux pour le projet sur lequel je suis (Ce qui m'embête c'est que j'ai bien envie de réutilisé la classe pour mes autres projet ).

J'ai décidé de stocké chaque string dans un tableau et de les concaténer juste a la fin (quand j'en aurait besoin en clair). Grace a cela, et en fonction des condition du code je pourrais naviguer simplement pour supprimer les string souhaité ou en ajouter d'autre au endroit voulu.

Je vous montrerais la classe dès qu'elle sera terminé si ca vous intéresse.

Merci à vous d'avoir participé en tous cas.
a+
Donaldinou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h53.


 
 
 
 
Partenaires

Hébergement Web