Как извлечь $parameters из метода __callStatic() для последующего преобразования в строку при помощи метода __ToString()?

class Concatenator
{
    private static $string = [];

    public static function __callStatic($method, $parameters)
    {   
        self::$string = $parameters;
    }

    public function __toString()
    {
        return str_replace(' ', '+', strtolower(self::$string));
    }
}

$concatenated = Concatenator::prepareString('I am concatenated');

echo $concatenated;

Не могу понять, как передать массив, хранящийся self::$string в магический метод __toString().


Ответы (1 шт):

Автор решения: Вадим Александру

Не знаю зачем вам это но все таки.

Ошибка 1 Ваш метод __callStatic() не возвращает ничего, соответственно в выражении

$concatenated = Concatenator::prepareString('I am concatenated');

$concatenated равен null

Ошибка 2

  public function __toString()
  {
    return str_replace(' ', '+', strtolower(implode(',', self::$string)));
  }

Свойство $string это массив, его нужно преобразовать в строку, к примеру через implode после чего применить ее к strtolower.

Ниже готовый вариант класса

class Concatenator
{
  private static $string = [];

  public static function __callStatic($method, $parameters)
  {
    self::$string = $parameters;

    return new static();
  }

  public function __toString()
  {
    return str_replace(' ', '+', strtolower(implode(',', self::$string)));
  }
}

$concatenated = Concatenator::prepareString('I am concatenated');


echo $concatenated;
→ Ссылка