Создание объектов на лету без назначения переменных с помощью PHP

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

new className()->someMethod();

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


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

5 ответов


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

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

редактировать

как указано в zerkms, также возможен заводской метод:

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

// Then in your code for example
ReflectionFactory::factory()->getConstants();

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

(new Foo)->bar()

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

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


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

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

testClass::staticMethod();

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

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

}
$a  = A::factory()->b();
?>