Est-ce que quelqu'un a fait une implémentation StringBuilder
en PHP?StringBuilder pour PHP
Répondre
Note:
Cette réponse est à partir de 2010, il pourrait y avoir stringbuilders qui peut améliorer la performance maintenant (à en juger par les commentaires ci-dessous). Je n'ai pas travaillé avec PHP depuis longtemps, donc mes connaissances ne sont pas à jour. Cette réponse pourrait être périmée.
Pourquoi voulez-vous utiliser un StringBuilder? Les chaînes de php sont mutables. Par conséquent, la performance n'est pas un problème.
Il suffit de construire la chaîne comme celui-ci
$string = "start";
$string .= "appended string";
$string .= "appended string";
etc.
Je voudrais +1, mais l'opérateur de concaténation est '. =', pas '+ =' ('+ =' est utilisé pour addition, qui est un opérateur différent de la concaténation) ... – ircmaxell
oups, merci de le signaler.Pour beaucoup utilisé pour Java: P. Le fixe maintenant. –
oui je l'ai remarqué aussi, du langage C :) – RobertPitt
Vous pouvez utiliser sprintf
qui est seulement une version de base, mais ne nécessite pas de bibliothèques supplémentaires, des exemples Suivez
$String = "Firstname %s, lastname %s, Age %d";
echo sprintf($String,"Robert","Pitt",22);
et poignées également coulée de type et de remplacement position:
$format = "The %2$s contains %1$d monkeys. That's a nice %2$s full of %1$d monkeys.";
sprintf($format, $num, $location);
Tous si je aime le regard de la réponse de jacob :)
prendre un coup d'oeil à la grande fonctionnalité de t sa fonction et sa fonction soeur ion ici: http://php.net/manual/en/function.sprintf.php
Je n'ai jamais compris l'utilité de cette fonction dans ce genre de méthode. – Webnet
@Webnet Eh bien, c'est bon pour les chaînes qui sont définies ailleurs (comme dans un fichier de traduction). Sinon, il ne devient rien de plus qu'une chaîne magique (qui est le même concept qu'un [nombre magique] (http://en.wikipedia.org/wiki/Magic_number)) – ircmaxell
L18n est exactement le meilleur usage pour cette fonction et aussi son fonction soeur pour les conversions char: 'printf (" char 65 =% c ", 65);' – RobertPitt
Il y a quelques implémentations là-bas, mais je ne vois pas pourquoi vous auriez besoin d'un StringBuilder en PHP, au moins pas pour des raisons de performance. La concaténation en chaîne de caractères en PHP est plus rapide que sprintf ou l'implémentation de Jacob suggérée.
Vous n'avez pas besoin StringBuilder ou StringBuffer en PHP, PHP est super pratique, je vous offre, à l'aide de heredoc et Nowdoc si vous vous souhaitez conserver PyString:
$YourString = "start";
$YourString .= <<<'EOD'
appended string
Example of string
spanning multiple lines
using nowdoc syntax.
EOD;
$YourString .= <<<buffer
appended string
Example of string
spanning multiple lines
using heredoc syntax.
appended string
appended string
buffer;
en fonction de votre réponse, j'ai fait une suggestion d'utiliser des variables et des champs de classe à l'intérieur du bloc HERE_DOC/NOW_DOC. –
Réponse de @Amir, m'a donné l'inspiration au fait qu'en PHP si vous voulez des paramètres "nommés" ou "positionnels", vous n'avez pas besoin de sprintf
, mais HERE_DOC/NOW_DOC fonctionne parfaitement. Vous pouvez mêmeutiliser cela à l'intérieur d'une classe pour les propriétés et les acquéreurs d'appel.
class MyClass{
private $property;
private $stock; // some other object with getter 'getSomeProperty()'
function __toString(){
$localvar = 'Localvar';
$localvar2 = 'Localvar2';
return <<<HERE_DOC
{{
fqsn: {$this->stock->getSomeProperty()},
property: {$this->property},
localvar: {$localvar},
localvar2: $localvar2
}}
HERE_DOC;
} // end __toString()
} // end MyClass
- 1. capacité StringBuilder()
- 2. Equivalent de StringBuilder pour les tableaux d'octets
- 3. Question liée à StringBuilder
- 4. Utilisation efficace de StringBuilder
- 5. Écrire StringBuilder au flux
- 6. Concernant Stringbuilder dans C#
- 7. Comment réutiliser StringBuilder obj?
- 8. StringBuilder format de chaîne
- 9. StringBuilder dans Flex
- 10. Gestion des ressources StringBuilder
- 11. Stringbuilder dans CIL (MSIL)
- 12. l'erreur dans le stringbuilder
- 13. StringBuilder AppendFormat avec @
- 14. NullPointerException avec StringBuilder
- 15. Liste Append articles à stringbuilder
- 16. Erreur d'exécution dans l'instance StringBuilder
- 17. C# StringBuilder avec des guillemets (forJSON)
- 18. Stringbuilder vs SQL pour la transformation XML/XSL
- 19. Création d'une boucle dans StringBuilder pour modifier un fichier texte
- 20. StringBuilder méthode d'extension pour l'ajout d'une collection en C#
- 21. problèmes en utilisant un StringBuilder pour construire HTML en C#
- 22. StringBuilder: comment obtenir la chaîne finale?
- 23. Suppression de lignes vides consécutives de StringBuilder
- 24. Ce qui est StringBuilder efficace ou CommaDelimitedStringCollection
- 25. Créer dynamiquement des contrôles en utilisant stringbuilder
- 26. Les chaînes StringBuilder sont-elles immuables?
- 27. P/Invoke une fonction passée StringBuilder
- 28. Problème avec StringBuilder et les littéraux XML
- 29. Effacement d'une chaîne de l'objet StringBuilder actuel
- 30. différences entre StringBuilder en Java et C#
Pourquoi voudriez-vous quelque chose comme ça? – Webnet
En relation: [Concaténation de chaînes php, Performance] (http://stackoverflow.com/q/124067/106224) (beaucoup de réponses rejettent le besoin d'une telle classe, mais toutes avec de bonnes raisons) – BoltClock
Vous ne le faites pas besoin de StringBuilder en PHP, voir ma réponse: http://stackoverflow.com/questions/124067/php-string-concatenation-performance/16112845#16112845 – nightcoder