Я посмотрел и попробовал, но я не могу найти ответ.
В 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");
?>
К сожалению, в 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
Вы не можете вызвать метод уровня экземпляра без экземпляра. Ваш синтаксис:
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 есть несколько примеров этого (например, использование индексации массива при возврате функции). Просто так оно и есть.