Когда вы говорите «Пустые функции», вы больше, чем просто говорите о __construct
и магических методах
То, как они помогают нам определить авторизацию действия, например
public class MyClass
{
private function __construct(){}
}
Это позволяет нам блокировать вызов new MyClass
, но его можно переопределить, вызвав статический метод и выполнив new self()
Также существуют другие причины, например запрещенное наследование, например:
#Class 1
public function Base
{
public function start()
{
echo "hello";
}
}
#Class 2
public function Layer extends Base
{
}
#Class 3
public function Layer extends Base
{
private function start(){}
}
Если посмотреть на вышеприведенный класс 2, он содержит вызываемый метод, называемый start, но это метод родительского класса, в классе 3 происходит то же самое, но он переопределяется локальным методом как таковым, и в качестве его частного он запрещает вызовmethod.
немного углубляясь в ООП, у нас есть интерфейсы, которые сообщают классу, что он должен содержать назначенный набор методов, поэтому, если класс реализует такой интерфейс, потребуется определить все необходимые методы, иначевыдаст ошибку, поэтому программисты могут создавать пустые методы для сохранения структуры класса.
В светеваш новый пример: нет конкретной причины для пустой публичной __constructor
кроме случаев, когда она расширяет другой класс.
Вот пример:
class Main
{
public function __construct()
{
echo "Main";
}
}
class FirstSub extends Main
{
}
class SecondSub extends Main
{
public function __construct()
{
echo "SecondSub";
}
}
class ThirdSub extends Main
{
public function __construct()
{
echo "ThirdSub <br />";
parent::__construct();
}
}
Как видно из структурыу нас есть один первичный класс с именем Main
и три подкласса.
Если мы инициализируем, основной класс собирался получить конструктор print Main
, но результаты будут варьироваться в зависимости от подклассов, поскольку переопределение конструкторародительский.
, поэтому инициализация следующего приведет к:
- Main:
Main
- FirstSub: `` - Nothing
- SecondSub:
SecondSub
- ThirdSub:
ThirdSub<br />Main
, так как использование пустой конструкции влияет на родительские классы.