Как извлечь $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;