Статический и нестатический вызов в PHP

ok У меня есть этот код, который я изучаю

class scope{ function printme(){ return "hello"; } public static function printme(){ return "hello"; } } $s = new scope(); echo $s->printme(); //non-static call echo "<br>"; echo scope::printme(); //static call 

Теперь это не действительно код моего проекта, но это то, что я хочу сделать

  1. Я хочу создать класс, который будет содержать статические и нестатические функции.
  2. Я хочу, чтобы функция была доступна как для статических, так и для нестатических вызовов.

Поскольку у нестатической функции есть много операций над ней, мне также нужно вызвать ее как статическую функцию, так что мне не нужно будет создавать экземпляр класса. Это возможно? или мне действительно нужно переписать функцию на другую функцию или класс?

ПРИМЕЧАНИЕ. Скажите, если я уже плохо программирую.

Вот правило:

Статический метод может использоваться как для статического метода, так и для нестатического метода.

Нестатический метод может использоваться только в нестационарном методе.

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

 class Scope { public function mynonstatic() { } public static function mystatic() { $s = new Scope(); return $s->mynonstatic(); } } 

Помните, что статический метод – это просто глобальная функция с уменьшенной областью. Они полезны, но не должны создаваться без уважительной причины.

Поскольку у нестатической функции есть много операций над ней, мне также нужно вызвать ее как статическую функцию, так что мне не нужно будет создавать экземпляр класса. Это возможно? или мне действительно нужно переписать функцию на другую функцию или класс?

Если вам это нужно статично, сделайте его статическим. Если вам это не нужно, держите его так, как есть. Внутри нестатической функции можно вызвать статическую функцию.

 class Foo { public function bar() { Foo::zex(); // or self::zex() or even $this->zex(); } public static function zex() { } } $foo = new Foo; $foo->bar(); 

Протирайся наоборот.

 class Foo { public function bar() { } public static function zex() { $foo = new Foo; $foo->bar(); } } 

Когда вы должны это сделать или вы должны это сделать, это еще один вопрос. Наиболее частое использование последнего, вероятно, является шаблоном Singleton.