Создавайте объекты на лету без назначения переменных с помощью PHP - PullRequest
6 голосов
/ 04 июля 2011

Мне просто интересно, возможно ли создание объекта на лету в PHP. Я думал, что видел это сделано раньше. Конечно, я могу просто присвоить его переменной, но мне просто интересно, возможно ли это.

new className()->someMethod();

Конечно, это вызывает синтаксическую ошибку, поэтому, очевидно, это не так (если это возможно). Должен ли я просто присвоить его переменной, поскольку у меня действительно нет проблем с этим, мне просто любопытно?


Просто некоторые дополнительные детали. Статические методы на самом деле не вариант, поскольку класс, для которого я пытался это сделать, был классом PHPs ReflectionMethod.

Ответы [ 5 ]

10 голосов
/ 23 октября 2013

это типичное использование в Java, но оно недоступно до PHP 5.3. И теперь это новая функция в PHP 5.4. Просьба проверить PHP 5.4 новые функции . И использование должно быть:

(new Foo)->bar()
1 голос
/ 04 июля 2011

Это работает, только если вы используете одноэлементный шаблон для создания экземпляра объекта.Если вы не знаете, как реализовать шаблон синглтона, вам придется искать в Интернете.Но так это будет работать:

className::getInstance()->someMethod();

РЕДАКТИРОВАТЬ

Как указано в zerkms, фабричный метод также возможен:

class ReflectionFactory
{
    public static function factory($arguments)
    {
        return new ReflectionClass($arguments);
    }
}

// Then in your code for example
ReflectionFactory::factory()->getConstants();
0 голосов
/ 04 июля 2011

Я не знаю, почему PHP не позволяет создавать цепочки конструкторов. Если вам действительно нужно это сделать, попробуйте что-то вроде ниже с необходимыми настройками.

<?php
class A {
  public function b()
  {
    echo "a->B is called";
  }
  public static function factory()
  {
    return new self;
  }

}
$a  = A::factory()->b();
?>
0 голосов
/ 04 июля 2011

Вы можете использовать статический метод в классе, не сохраняя экземпляр класса в переменной.

class testClass{
    public static function staticMethod(){
        echo "Static method";
    }
}

testClass::staticMethod();
0 голосов
/ 04 июля 2011

В настоящее время в php невозможно создать экземпляр нового объекта и вызвать его методы в одном выражении.

Так что, очевидно, вам нужно присвоить его какой-то переменной раньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...