Страницы

Поиск по вопросам

понедельник, 9 декабря 2019 г.

Создание объектов “на лету”

#ооп #php


Всем доброго дня!
Раньше, при создании объекта класса, я как-то не задумывался об удобном создании
объекта и использования его полезного функционала "на лету"( т.е в строчку ). Наверное,
львиная доля ОО-языков поддерживает эту фичу. Как же обстоят дела с тем же самым в PHP?
Обычно используется полезный функционал класса путем первоначального создания объекта
и последующим вызовом его методов/использования переменных класса:
$OBJECT = new Object();
$OBJECT -> CallUsefulMethod();

Но во многих случаях точно известно, что объект будет использоваться единожды, следовательно,
в присвоении его какой-л. переменной нет смысла. Впрочем, в этом и заключается прелесть
создания "на лету". Есть ли способы делать в PHP что-то вроде такого(?):
(new Object()) -> CallUsefulMethod();

Спасибо ;)    


Ответы

Ответ 1



@0xFFh еще вы можете написать метод create и пользовать его вместо new: public static function create($args) { $obj = new self; // some code return $obj; } Технически почти то же самое, но объяекты вполне себе создаются с учетом входных параметров. $catsMeow = Cat::create($color, $height, $length)->SayMeow(); А если методы возвращают $this - можно и цепочки а ля jQuery создавать $cat = Cat::create('white', 10, 30)->feed($meat)->colorize('black'); Небольшой листинг кода по комментарию {$property} = $value; return $this; } function execute($method, $args = array()) { $cb = array($this, $method); if (is_callable($cb)) call_user_func_array($cb, $args); return $this; } function sayMeow() { echo $this->meow . '
'; } } $cat = Cat::create() ->set('color', 'white') ->set('height', 10) ->execute('sayMeow') ->set('meow', 'Myaaaw') ->execute('sayMeow'); ?> out: Meow Myaaaw

Ответ 2



Увы, PHP не поддерживает анонимных объектов. Можно использовать паттерн "Singleton". SayMeow(); //using ?>

Ответ 3



property1 = 'string'; $obj->property2 = 13;

Ответ 4



Вполне можно (испробовано на php7): sayB(); Только стоит задуматься о целесообразности - ведь объект будет создан в памяти но на него не будет ссылки. После использования нужного метода, вы не сможете при необходимости удалить объект. Он будет удален из памяти только при заврешении работы всего вашего скрипта.

Комментариев нет:

Отправить комментарий