как бы сначала надо ответить на вопрос "где это нужно и зачем"
Вариант 1
Не надо делать ооп ради ооп, просто в класс Message добавь метод getUrl()
Вариант 2
Message это какой-то сторонний класс, и нет возможности его изменить, по этому делаем над ним декоратор.
class MessageDecorator
{
private $message;
public function __construct(Message $message)
{
$this->message = $message;
}
public function getTitle()
{
return $this->message->getTitle();
}
public function getText()
{
return $this->message->getText();
}
public function getUrl()
{
// create url
return 'url';
}
}
$message = new MessageDecorator(new Message($title, $text));
$url = $message->getUrl();
Вариант 3
Выносим генерацию url в отдельный сервис
class UrlService
{
public function getMessageUrl(Message $message)
{
// create url
return 'url';
}
}
$message = new Message($title, $text);
$urlService = new UrlService();
$url = $urlService->getMessageUrl($message);