Если вас беспокоит тип или поведение возвращаемого класса, вам действительно следует определить интерфейс для этого:
interface KeyInterface
{
public function getKey(): ?string;
public function getValidTill(): ?string;
}
Затем анонимный класс реализует интерфейс:
public function getApi(): KeyInterface
{
$api = $this->api ?: [];
return new class ($api) implements KeyInterface
...
}
Анонимные классы могут по-прежнему реализовывать интерфейсы и наследоваться от других классов.
Можно использовать htmlentities () функция. Это заменит все специальные символы их HTML-эквивалентом. Это должно сделать задание Ваш требовать.
Хороший вопрос btw, +1.
Но Вы, вероятно, не должны. Служите своей странице в кодировании, которое включает их (UTF-8, ISO-8859-1), и можно включать тех, которые как литеральные, незавершенные символы.
Ответ уже дан: используйте htmlentities ()
. Кроме того, было предложено использовать UTF-8, что, конечно, является действительно хорошей идеей. Однако, если вы планируете использовать htmlentities ()
для строк UTF-8, используйте следующий код (или вы получите странно закодированные символы):
htmlentities($str, ENT_COMPAT, 'UTF-8')
Как вы можете себе представить, это отстой, если добавить второй и третий аргумент все время. Для большинства проектов мне нужно htmlentities ()
, в итоге я пишу функцию ярлыка, то есть:
function he($str) { // shortcut function for htmlentities() with UTF-8 settings
return htmlentities($str, ENT_COMPAT, 'UTF-8');
}