Вот сокращенный фрагмент моего кода
namespace classes\tools\html;
class html{
public static function element($tag) {
return new element($tag);
}
}
class element{//......
public function __toString() {$element = "<$this->tag";
foreach ($this->attributes as $attribute => $value) {
$element.= " $attribute=\"$value\"";
}
if ($this->selfClosing) {
$element.="/>";
return $element;
}
$element.=">$this->html</$this->tag>";
return $element;
}
}$html = new html();
что смущает меня, если я называю элемент с:
$html::element('a')->attr('href','/home/')->html('home');
Он вернется
'<a href="/home/">home</a>"
но если я позвоню с:
$html->element('a')->attr('href','/home/')->html('home');
Это вернет element
объект
Поэтому мой вопрос: почему он называется статически с ::
оператор вызывает __toString
метод, а последний нет?
редактировать
Я попытался воспроизвести это поведение, используя код внизу этого поста, и не смог.
Буду рад, если вы попытаетесь запустить свой код на PhpFiddle и увидев это, вы получите тот же результат.
Также может помочь, если вы можете опубликовать основы (возвращаемые значения и типы) attr () и html ();
извините за публикацию этого ответа, но я пока не могу комментировать, и я нахожу этот вопрос интересным.
Код, который я использовал:
class html{
public static function element($tag) {
return new element($tag);
}
}
class element{
public function attr($a,$b){
return $this;
}
public function html($a){
return $this;
}
public function __toString() {
return "iLot\n";
}
}
$html = new html();
echo $html::element('a')->attr('href','/home/')->html('home');
echo $html->element('a')->attr('href','/home/')->html('home');
?>
функция element () класса html является статической, поэтому вы не хотите создавать экземпляр html, а вместо этого вызываете свою функцию следующим образом:
echo html::element('a')->...
Иногда бывает необходимо привести возвращаемое значение, чтобы получить строку, потому что функция элемента возвращает объект элемента:
$var = (string)html::element('a')->...
NB: обратите внимание, я не использую $ html