Глядя на исходный код (кратко)
/**
* Default format to use for __toString method when type juggling occurs.
*
* @var string
*/
public const DEFAULT_TO_STRING_FORMAT = 'Y-m-d H:i:s';
И я знаю, магический метод __toString
вызывается при выводе, например echo
или print
, но не var_dump
, var_export
и print_r
.Но на самом деле это влияет на приведение объекта к строке (на самом деле не зависит от вывода).Просто при использовании таких вещей, как var_dump
и «friends», сначала не преобразуется в строку.
Например, мы можем «доказать это» довольно легко
class foo{
public function __toString(){
return "foo";
}
}
$f = new foo;
print_r($f);
echo "\n";
echo $f;
echo "\n\n";
print_r((string)$f);
Output
foo Object //output from print_r
(
)
foo //output from echo
foo //output from casting to string and print_r
Итак, чтобы ответить на ваш вопрос, это потому, что вы используете что-то другое, чем echo
, и класс предназначен для вывода этого при преобразовании его в строку.
Так что, как только выв сочетании с этим небольшим фрагментом, который я нашел в исходном коде, все это имеет смысл.
- Вы выводите его таким образом, чтобы не преобразовывать его в строку
- Когда он конвертируется в строку, он предназначен для использования этого формата.
И даже не смотря на метод toString
, могу поспорить, он содержит что-то вроде этого:
public function __toString(){
return $this->format(static::DEFAULT_TO_STRING_FORMAT); //or self::
}
И на самом деле (после некоторого копания) мы находим его в «Черте» Здесь
public function __toString()
{
$format = $this->localToStringFormat ?? static::$toStringFormat;
return $format instanceof Closure
? $format($this)
: $this->format($format ?: (
defined('static::DEFAULT_TO_STRING_FORMAT')
? static::DEFAULT_TO_STRING_FORMAT
: CarbonInterface::DEFAULT_TO_STRING_FORMAT
));
}
Я также могу сказать (Посмотрев на это) что вы, вероятно, можете установить один из этих 2:
$this->localToStringFormat
static::$toStringFormat
, чтобы переопределить это поведение (либо как функцию anon, либо как вызов своего собственного метода формата), того, какой формат он возвращает при приведениив строку.
И я никогда раньше не использовал Carbon !!
Ура.
песочница