StringBuilder для PHP - PullRequest
       8

StringBuilder для PHP

45 голосов
/ 18 ноября 2010

Кто-нибудь сделал StringBuilder реализацию в PHP?

Ответы [ 5 ]

92 голосов
/ 18 ноября 2010

Примечание:

Этот ответ относится к 2010 году. Возможно, в настоящее время могут использоваться сборщики строк, которые могут улучшить производительность (судя по комментариям ниже) Я давно не работал с php, поэтому мои знания не соответствуют современным требованиям. Этот ответ может быть устаревшим.


Почему вы хотите использовать StringBuilder? Строки в php изменчивы. Поэтому производительность не является проблемой.

Просто создайте строку, подобную этой

$string = "start";
$string .= "appended string";
$string .= "appended string";
etc.
7 голосов
/ 18 ноября 2010

Вы можете использовать sprintf, который является только базовой версией, но не требует дополнительных библиотек, примеры. Следуйте

$String = "Firstname %s, lastname %s, Age %d";
echo sprintf($String,"Robert","Pitt",22);

А также обрабатывает тип литья и смену позиции:

$format = "The %2$s contains %1$d monkeys. That's a nice %2$s full of %1$d monkeys.";
sprintf($format, $num, $location);

Все, хотя мне нравится, как выглядит ответ Джейкоба:)

взгляните на большую функциональность т его функция и функция сестры здесь: http://php.net/manual/en/function.sprintf.php

4 голосов
/ 18 ноября 2010

Существует несколько реализаций, однако я не понимаю, зачем вам нужен StringBuilder в PHP, по крайней мере, из соображений производительности. Конкатенация простых строк в PHP выполняется быстрее, чем sprintf или имплементация, предложенная Джейкобом.

2 голосов
/ 23 октября 2013

Вам не нужен StringBuilder или StringBuffer в PHP, PHP очень удобен, я предлагаю вам, используя отсюда отсюда и NowDoc, если вы хотите сохранить 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;
1 голос
/ 15 августа 2014

Ответ @Amir вдохновил меня на то, что в PHP, если вам нужны «именованные параметры» или «позиционные» параметры, вам не нужно sprintf, но HERE_DOC / NOW_DOC работает идеально. Вы можете даже использовать это внутри класса для свойств и получателей вызовов.

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
...