создать экземпляр класса с помощью переменной и пространства имен
Доброго времени суток. Допустим есть переменная $className = «Test» . Нужно создать экземпляр класса используя пространство имен.
$classObject = new liw\controllers\$className;
Выдаст ошибку:
syntax error, unexpected ‘$className’ (T_VARIABLE)
Как избавится от проблемы? если сделать так, то все сработает, но правильно ли это?
$className = "Test"; $className = "liw\\controllers\\"; $classObject = new $className();
Отслеживать
13.9k 4 4 золотых знака 33 33 серебряных знака 51 51 бронзовый знак
задан 5 мар 2017 в 17:27
Misha Rodnoy Misha Rodnoy
121 1 1 серебряный знак 12 12 бронзовых знаков
Наведите порядок в переменных/ошибках в вашем вопросе
5 мар 2017 в 17:37
«Правильно ли это?» Вполне
5 мар 2017 в 17:43
Спасибо, исправил
5 мар 2017 в 18:18
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Да, всё правильно. Строка с именем класса должна содержать полный namespace.
Если с директивой new используется строка (string), содержащая имя класса, то будет создан новый экземпляр этого класса. Если имя находится в пространстве имен, то оно должно быть задано полностью.
namespace app\test < class A<>> namespace < $a = new app\test\A; $name = 'A'; $fullName = "app\\test\\"; $a = new $fullName(); >
Отслеживать
ответ дан 5 мар 2017 в 17:48
27.2k 2 2 золотых знака 45 45 серебряных знаков 76 76 бронзовых знаков
- php
- ооп
- namespace
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Основы
Каждое определение класса начинается с ключевого слова class, затем следует имя класса, и далее пара фигурных скобок, которые заключают в себе определение свойств и методов этого класса.
Именем класса может быть любое слово, при условии, что оно не входит в список зарезервированных слов PHP, начинается с буквы или символа подчеркивания и за которым следует любое количество букв, цифр или символов подчеркивания. Если задать эти правила в виде регулярного выражения, то получится следующее выражение: ^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$.
Класс может содержать собственные константы, переменные (называемые свойствами) и функции (называемые методами).
Пример #1 Простое определение класса
class SimpleClass
// объявление свойства
public $var = ‘значение по умолчанию’ ;
?php
// объявление метода
public function displayVar () echo $this -> var ;
>
>
?>
Псевдо-переменная $this доступна в том случае, если метод был вызван в контексте объекта. $this является ссылкой на вызываемый объект. Обычно это тот объект, которому принадлежит вызванный метод, но может быть и другой объект, если метод был вызван статически из контекста другого объекта. Это показано на следующих примерах:
Пример #2 Переменная $this
class A
function foo ()
if (isset( $this )) echo ‘$this определена (‘ ;
echo get_class ( $this );
echo «)\n» ;
> else echo «\$this не определена.\n» ;
>
>
>
?php
class B
function bar ()
// Замечание: следующая строка вызовет предупреждение, если включен параметр E_STRICT.
A :: foo ();
>
>
$a = new A ();
$a -> foo ();
// Замечание: следующая строка вызовет предупреждение, если включен параметр E_STRICT.
A :: foo ();
$b = new B ();
$b -> bar ();
// Замечание: следующая строка вызовет предупреждение, если включен параметр E_STRICT.
B :: bar ();
?>
Результат выполнения данного примера:
$this определена (A) $this не определена. $this определена (B) $this не определена.
new
Для создания экземпляра класса используется директива new. Новый объект всегда будет создан, за исключением случаев, когда он содержит конструктор, в котором определен вызов исключения в случае ошибки. Рекомендуется определять классы до создания их экземпляров (в некоторых случаях это обязательно).
Если с директивой new используется строка ( string ), содержащая имя класса, то будет создан новый экземпляр этого класса. Если имя находится в пространстве имен, то оно должно быть задано полностью.
Пример #3 Создание экземпляра класса
// Это же можно сделать с помощью переменной:
$className = ‘Foo’ ;
$instance = new $className (); // Foo()
?>
В контексте класса можно создать новый объект через new self и new parent.
Когда происходит присвоение уже существующего экземпляра класса новой переменной, то эта переменная будет указывать на этот же экземпляр класса. Тоже самое происходит и при передаче экземпляра класса в функцию. Копию уже созданного объекта можно создать через ее клонирование.
Пример #4 Присваивание объекта
$instance = new SimpleClass ();
$assigned = $instance ;
$reference =& $instance ;
$instance -> var = ‘$assigned будет иметь это значение’ ;
$instance = null ; // $instance и $reference становятся null
var_dump ( $instance );
var_dump ( $reference );
var_dump ( $assigned );
?>
Результат выполнения данного примера:
NULL NULL object(SimpleClass)#1 (1) < ["var"]=>string(30) "$assigned будет иметь это значение" >
В PHP 5.3.0 введены несколько новых методов создания экземпляров объекта:
Пример #5 Создание новых объектов
class Test
static public function getNew ()
return new static;
>
>
?php
class Child extends Test
<>
$obj1 = new Test ();
$obj2 = new $obj1 ;
var_dump ( $obj1 !== $obj2 );
$obj3 = Test :: getNew ();
var_dump ( $obj3 instanceof Test );
$obj4 = Child :: getNew ();
var_dump ( $obj4 instanceof Child );
?>
Результат выполнения данного примера:
bool(true) bool(true) bool(true)
extends
Класс может наследовать методы и свойства другого класса используя ключевое слово extends при его описании. Невозможно наследовать несколько классов, один класс может наследовать только один базовый класс.
Наследуемые методы и свойства могут быть переопределены (за исключением случаев, когда метод класса объявлен как final) путем объявления их с теми же именами, как и в родительском классе. Существует возможность доступа к переопределенным методам или статическим методам путем обращения к ним через parent::
Когда переопределяются методы число и типы аргументов должны оставаться такими же как и были, иначе PHP вызовет ошибку уровня E_STRICT . Это не относится к конструктору, который можно переопределить с другими параметрами.
Пример #6 Простое наследование классов
class ExtendClass extends SimpleClass
// Переопределение метода родителя
function displayVar ()
echo «Расширенный класс\n» ;
parent :: displayVar ();
>
>
?php
$extended = new ExtendClass ();
$extended -> displayVar ();
?>
Результат выполнения данного примера:
Расширенный класс значение по умолчанию
::class
Начиная с версии PHP 5.5 можно использовать ключевое слово class для разрешения имени класса. С помощью конструкции ClassName::class можно получить строку с абсолютным именем класса ClassName. Обычно это довольно полезно при работе с классами, использующими пространства имен.
Пример #7 Разрешение имени класса
Результат выполнения данного примера:
Простой пример создания экземпляров класса на PHP.
Но, этот класс пока ничего не делает. Он просто содержит некую описательную часть такого класса, который будет содержать будущих работников.
По этому классу будут создаваться экземпляры классов, которые будут конкретными работниками.
Давайте посмотрим, как мы можем создать экземпляр класса конкретного работника, с которым уже будем производить какие-то манипуляции.
Давайте создадим новую переменную и внутрь нее разместим экземпляр класса Worker:
$worker1 = new Worker();
Экземпляры классов в PHP создаются с помощью служебного слова new и указывается имя того класса, для которого создается объект (экземпляр класса).
Можно посмотреть, что находится внутри нашей переменной:
print_r($worker1);
У нас отобразиться объект класса Worker. Но, у этого объекта пока не заполнены никакие свойства.
Для того, чтобы добавить эти данные:
$worker1->first_name = "Вася";
Аналогичным образом добавляются значения для остальных свойств. См. видео.
Можно создавать несколько экземпляров класса от одного класса.
$worker2 = new Worker();
Вот такой принцип создания экземпляров класса есть в PHP и задания его свойств.

Дмитрий Ченгаев
Занимаюсь заказной веб-разработкой. Подписывайтесь на телеграм канал https://t.me/dchengaev 😉
2020-12-06
Чтобы оставить сообщение, зарегистрируйтесь/войдите на сайт через:
Создание класса php
![]()
Создание класса на php является началом в изучении ООП.
Создаётся класс через функцию «class».
Свойства класса
Создаём свойства. Свойства — это определённые значения по которым мы будем обращаться к классу.
public — модификатор доступа переменной. Свойство будет доступно из вне класса.
Конструктор класса
Далее мы создаём конструктор класса, через функцию «__construct».
x = $x; $this->y = $y; > > >?
$this — обращаемся к данному объекту. В данном случае к переменным.
Теперь попробуем создать объект.
x."
"; echo $point->y."
"; >?
Мы получили значения элементов через класс. На экран выводиться значения переменных.
Также мы можем манипулировать свойствами объекта, попробуем присвоить значение x=50 и выведем его.
x = 50; echo $point->x."
"; >?
На экране увидим новое значение.
Методы класса
Методы класса — это по сути функции конкретного класса.
Давайте создадим два метода(функции класса). В первом мы будем получать значение x, а во втором изменять его значение.
x = $x; $this->y = $y; > public function getX()< return $this->x; > public function setX($x)< $this->x = $x; > > >?
Отлично, теперь мы их опробуем:
getX()."
"; $point->setX(100); echo $point->getX()."
"; >?
На экране мы увидим:
5 100
В начале, мы с помощью функции GetX получили значение, а затем вывели — это 7.
Затем с помощью setX дали переменной новое значение и первой функции вывели его — это 100.
Если мы попробуем просто вывести класс point
echo $point;
То увидим ошибку: «Catchable fatal error: Object of class Point could not be converted to string», чтобы этого избежать используем метод __toString, который уже зарезервирован в php, который возвращает строку, если мы вызываем объект, давайте вставим его в класс.
class Point< . public function __toString()< return "Вывод объекта с координатами (".$this->x."; ".$this->y.")"; > > echo $point;
И после того, как мы вызвали объект через echo, мы увидим на экране значение, которое возвращается через метод.
Вывод объекта с координатами (100; 7)
Также есть метод, который срабатывает при уничтожение объекта(когда объект уже не используется), к примеру если мы его уничтожим через оператор unser($point). Этот метод по умолчанию ничего не выводит, но мы можем это исправить.
class Point < . public function __destruct()< echo "Объект уничтожен"; >>
Также давайте рассмотрим, как передавать объекты. Передадим объект point новому методу.
class Point< . public function setPoint($point)< $this->x = $point->x; $this->y = $point->y; > > $new_point = new Point(10,20); $point->setPoint($new_point); echo $point."
";
Теперь разберём. Мы создали новый объект (new_point), затем значения нового объекта передаём нашему point и выводим его.
В этой статье мы подробно разобрали, как создаются : классы, объекты, методы(а также использования зарезервированных), это первый этап в изучении ООП для PHP.
На просторах Youtube нашёл хороший урок по данной статье.