@cybernoob

Вопрос по статическим классам?

Цитата:
В статических классах не используются конструкторы. Поэтому каждый статический метод сам должен выполнять проверку своих зависимостей, а вызывающий код должен инициализировать все параметры метода, если не используются значения по умолчанию.


1. Если в классе есть статический метод у класса что, не может быть конструктора?
2. О каких зависимостях идёт речь? Можно передать в него всё, что нужно

3.
вызывающий код должен инициализировать все параметры метода

Внутри статического класса нельзя обратиться к свойству класса? Например $a = $this->var;
  • Вопрос задан
  • 89 просмотров
Решения вопроса 3
  • kimono
    @kimono
    Yii2 - developer
    Нет понятия статического класса. Статическими могут быть свойства или методы класса, но не сам класс.
    1. У класса может быть конструктор вне зависимости от наличия статических методов.
    2. Статический метод не имеет доступа к свойствам класса, поэтому да, туда надо передавать или подтягивать внурти зависимости метода от класса.
    3. Из статического метода нельзя обратиться через $this.

    PS: другими словами - статический метод, это просто функция, которую можно вызвать без создания объекта этого класса, а статическое свойство - это "статическая переменная".
    Ответ написан
  • OnYourLips
    @OnYourLips
    PHP не содержит синтаксиса статических классов.
    Однако вы все равно можете их иметь, сделав конструктор приватным (private function __construct() {}), а все методы - статическими.
    Внутри статического класса нельзя обратиться к свойству класса.
    Ответ написан
  • AK-VoronM
    @AK-VoronM
    "Мало-мало программист"
    1. Если в классе есть статический метод у класса что, не может быть конструктора?

    Наличие статического метода не делает класс статическим. Формально вам ни кто не запрещает реализовывать конструктор в статических классах, но вызваны они никогда не будут.

    2. О каких зависимостях идёт речь? Можно передать в него всё, что нужно

    Речь идет о внутренних зависимостях. Например подключение к бд, определенное в конструкторе не будет доступно.

    Внутри статического класса нельзя обратиться к свойству класса? Например $a = $this->var;

    Нельзя. Нет объекта, нет указателя $this. Для доступа к свойствам используется конструкция self:$var. Но, чтобы свойство было доступно - оно должно быть заранее определено прям в классе. Рассматривайте статические классы, как наборы связанных функций.

    з.ы. Еще раз, наличие статического метода или свойства в классе, не делает этот класс статическим. Для статических классов никогда не создают инстансы.
    Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы