вызов метода класса (с конструкторами) без объектного инстанцирования в php

Я посмотрел и попробовал, но я не могу найти ответ.

В PHP действительно ли возможно назвать функцию членства класса (когда тот класс требует, чтобы конструктор получил параметры), не инстанцируя его как объекта?

Пример кода (который дает ошибки):

<?php

class Test {
    private $end="";

    function __construct($value) {
        $this->end=$value;
    }

    public function alert($value) {
        echo $value." ".$this->end;
    }
}

//this works:
$example=new Test("world");
$example->alert("hello");

//this does not work:
echo Test("world")::alert("hello");

?>
6
задан myk00 23 June 2010 в 04:06
поделиться

2 ответа

К сожалению, в PHP нет поддержки для этого, но вы творческий и ищущий парень :D

Вы можете использовать "фабрику", пример:

<?php

class Foo
{
   private $__aaa = null;

   public function __construct($aaa)
   {
      $this->__aaa = $aaa;
   }

   public static function factory($aaa)
   {
      return new Foo($aaa);
   }

   public function doX()
   {
      return $this->__aaa * 2;
   }
}

Foo::factory(10)->doX();   // outputs 20
21
ответ дан 8 December 2019 в 03:09
поделиться

Вы не можете вызвать метод уровня экземпляра без экземпляра. Ваш синтаксис:

 echo Test ("world") :: alert ("привет");

не имеет большого смысла. Либо вы создаете встроенный экземпляр и немедленно его отбрасываете, либо метод alert () не имеет неявного этого экземпляра.

Предположим:

class Test {
  public function __construct($message) {
    $this->message = $message;
  }

  public function foo($message) {
    echo "$this->message $message";
  }
}

вы можете сделать:

$t = new Test("Hello");
$t->foo("world");

, но синтаксис PHP не позволяет:

new Test("Hello")->foo("world");

, что в противном случае было бы эквивалентом. В PHP есть несколько примеров этого (например, использование индексации массива при возврате функции). Просто так оно и есть.

1
ответ дан 8 December 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: