@hufawoso

Как в php добавить метод к объекту динамически?

Пробую так, не работает:
<?php
$std = new stdClass();

$std->getTitle = function() {
    return 'TITLE';
};

echo $std->getTitle();
  • Вопрос задан
  • 3509 просмотров
Решения вопроса 2
@antonowano
Профессиональный самоучка
Так никто не делает. Учите ООП. Если вам нужны новые методы в классе, расширьте его с помощью наследования. А так как этот stdClass ничего из себя не представляет, то создайте новый класс пропишите ему нужные методы и по необходимости назначьте __get(), __set() методы для создания новых свойств.
class MyStdClass extends stdClass {
    public function getTitle() {
        return 'TITLE';
    }
}

$std = new MyStdClass();

echo $std->getTitle();


Если вы не можете без этого жить, то это работает вот так:
echo ($std->getTitle)();
// или
$func = $std->getTitle;
echo $func();
// а если еще нужен контекст класса
echo ($std->getTitle)->bindTo($std)();
Ответ написан
@sscrm
web разработчик
Отвечаю на заданный вопрос: никак, в рантайме добавить метод классу не получится.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@shagguboy
class AnObj extends stdClass
{
    public function __call($closure, $args)
    {
        return call_user_func_array($this->{$closure}, $args);
    }
 }
 $a=new AnObj();
 $a->color="red";
 $a->sayhello=function(){ echo "hello!";}
 $a->sayhello();//output: "hello!"
Ответ написан
@karminski
Senior React.JS Developer
Через геттеры/сеттеры вероятно. Вам нужно переопределить магические методы: __get(), __set() и другие.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы