Ответ 1
Вы должны создать новый объект внутри статического метода, чтобы получить доступ к нестатическим методам внутри этого класса:
class Foo {
public function fun1()
{
return 'non-static';
}
public static function fun2()
{
return (new self)->fun1();
}
}
echo Foo::fun2();
Результатом будет non-static
Позднее редактирование. Как видно из интереса к передаче переменных в конструктор, я опубликую обновленную версию класса:
class Foo {
private $foo;
private $bar;
public function __construct($foo, $bar)
{
$this->foo = $foo;
$this->bar = $bar;
}
public function fun1()
{
return $this->foo . ' - ' . $this->bar;
}
public static function fun2($foo, $bar)
{
return (new self($foo, $bar))->fun1();
}
}
echo Foo::fun2('foo', 'bar');
Результат будет foo - bar