Как создать объект по имени класса в PHP
В редких случаях бывает нужно создавать объект по имени класса в PHP. Используется это нечасто, но когда это требуется, то данная возможность отлично сказывается и на производительности, и на количестве кода. Давайте с Вами разберём, как создать объект по имени класса, и я покажу пример, где я лично отлично сэкономил, используя данную возможность в PHP.
Для начала сразу привожу код:
<?php
$class = "Point";
$obj = new $class();
?>
После его выполнения будет создан объект класса Point. Казалось бы, зачем это нужно? Привожу кусок кода из личной практики (он сильно упрощён, но самую суть я оставил):
<?php
$view = $_GET["view"];
switch ($view) {
case "pagea":
$content = new PageAContent($db);
break;
case "pageb":
$content = new PageBContent($db);
break;
case "pagec":
$content = new PageCContent($db);
break;
// Далее ещё пару десятков подобного дублирования
?>
А вот теперь посмотрите, как я сократил код с использованием возможности создания объекта по имени класса в PHP:
<?php
$class = $_GET["view"]."Content";
$content = new $class();
?>
Более того, при добавлении новой ключевой страницы на сайт мне не надо снова лезть в этот файл и добавлять 101-й блок.
Вот так, на первый взгляд, бесполезная возможность, отлично помогла оптимизировать работу движка и упростила дальнейшее сопровождение.
-
- Михаил Русаков
Комментарии (5):
Круто! Спасибо. Только вот у вас опечатка в этом предложении "и я покажу пример, где я лично отлично сэкономил, используя данную возможностьв в PHP." В слове возможность буква "В" в конце лишняя
Ответить
Спасибо, исправил!
Ответить
На форум http://myrusakov.ru/forum.html?act=thread&id=968, выложил комент, из за того что код сюда вставлять нельзя
Ответить
Михаил, огромное вам спасибо! Уже не первая отличная статья! Теперь будем знать как сократить код обработчика контента :)
Ответить
Доброго времени суток! хотелось бы узнать как сделать упражнение из урока "От нуля до Гуру/ООП в РНР/Статистическме свойства и методы ". Методы написал, а со всем остальным у меня проблема! Прошу Вас помочь! Заранее спасибо!
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.