__toString не выводит

Я обнаружил, что запись PHP OOP — toString не работает, но она не решает мою проблему, так как я считаю, что правильно вызываю магический метод …

Вот мой код:

class Alerts {

public $message;
public $type;
public $output;

public function __construct($message_id)
{
include 'con.php';
$stmt = $conn->prepare(
'SELECT * FROM alerts WHERE id = :message_id');
$stmt->execute(array(':message_id' => $message_id));

while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$this->type = $row['type'];
$this->message = $row['message'];
}
}

public function __toString (){
$output ='';
$output .= "<div class='" . $this->type . "'><button class='close' data-dismiss='alert'></button>";
$output .= "<i class='fa fa-check-circle'></i>&nbsp;<strong>";
$output .= $this->message;
$output .= "</strong> </div>";
return $output;
}

}

Это работает, если я позвоню:

$message_id = 6;

$alert = new Alerts($message_id);
$output ='';
$output .= "<div class='" . $alert->type . "'><button class='close' data-dismiss='alert'></button>";
$output .= "<i class='fa fa-check-circle'></i>&nbsp;<strong>";
$output .= $alert->message;$output .= "</strong> </div>";

на странице, но не если я использую:

$message_id = 6;

$alert = new Alerts($message_id);
echo $alert->output;

Я новичок с PHP ООП, поэтому вы очень признательны за помощь

1

Решение

От документы по PHP:

__toString() Метод позволяет классу решить, как он будет реагировать, когда обрабатывается как строка. Например, что echo $obj; напечатает. Этот метод должен вернуть строку, так как в противном случае фатальный E_RECOVERABLE_ERROR ошибка уровня испускается.

По этой логике, делая echo $alert->output; просто выведет пустое свойство public $output; это было объявлено в вашем классе. Две причины, по которым public $output пуст и не изменяется

  1. У вас нет доступа $this->output в контексте __toString() метод.
  2. __toString() не вызывается при доступе к какому-либо методу или свойству объекта, только когда вы рассматриваете объект как строку.

Что вы на самом деле должны делать, если решите использовать __toString() является:

echo $alert;
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]