Можно ли в PHP определить метод класса за пределами класса?

92
09 января 2022, 15:10

Вроде такого:

class MyClass
{
    // здесь объявляю метод
    static public function myFunc();
}
// здесь определяю метод
MyClass::myFunc()
{
    echo 'test';
}

Цель, которую я хотел бы достичь - отделить блоки определения методов от блока определения класса. Хотел бы видеть вместо такой картины:

class MyClass
{
    protected function myFunc()
    {
        echo 'test';
    }
    protected function myFunc2()
    {
        echo 'test2';
    }
    protected function myFunc3()
    {
        echo 'test3';
    }
}

вот такую:

class MyClass
{
    protected function myFunc();
    protected function myFunc2();
    protected function myFunc3();
}
MyClass::myFunc()
{
   echo 'test';
}
MyClass::myFunc2()
{
   echo 'test2';
}
MyClass::myFunc3()
{
   echo 'test3';
}
Answer 1

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

Абстракция:

abstract class MyAbstractClass
{
    abstract static function myFunc();
}
class MyClass extends MyAbstractClass
{
    protected function myFunc()
    {
        echo 'test';
    }
}

Интерфейс:

interface MyInterfaceClass
{
    protected function myFunc();
}
class MyClass implements MyInterfaceClass
{
    protected function myFunc()
    {
        echo 'test';
    }
}
READ ALSO
Вывести последнюю запись

Вывести последнюю запись

Есть 3 таблицы: users

75
onClick функция в EJS

onClick функция в EJS

Возникла проблема вызова функции по хэндлеру onClick в ejs из get запросаФункция должна лежать на сервере ибо будут выполнятся операции с бд и т

111
Почему не добавились элементы в массив? [дубликат]

Почему не добавились элементы в массив? [дубликат]

Пытаюсь добавить словари с массив itemsElems:

92
ограничение строки в js

ограничение строки в js

есть скрипт который должен ограничивать строку по кол-во символов и в конце троеточие добавлять, но добавляет только троеточие

119