PHP 5: константа по сравнению с помехами

В PHP 5, каково различие между использованием const и static?

Когда каждый является соответствующим? И что делает роль public, protected и private игра - если таковые имеются?

163
задан Peter Mortensen 14 July 2019 в 13:22
поделиться

3 ответа

В контексте класса статические переменные находятся в области видимости класса (а не объекта), но, в отличие от константы, их значения могут быть изменены.

class ClassName {
    static $my_var = 10;  /* defaults to public unless otherwise specified */
    const MY_CONST = 5;
}
echo ClassName::$my_var;   // returns 10
echo ClassName::MY_CONST;  // returns 5
ClassName::$my_var = 20;   // now equals 20
ClassName::MY_CONST = 20;  // error! won't work.

Открытые, защищенные и private не имеют значения с точки зрения констант (которые всегда публичны); они полезны только для переменных класса, включая статические переменные.

  • общедоступные статические переменные могут быть доступны где угодно через ClassName :: $ variable.
  • защищенные статические переменные могут быть доступны для определяющего класса или расширяющих классов через ClassName :: $ переменная.
  • частные статические переменные могут быть доступны только определяющему классу через ClassName :: $ variable.

Редактировать: Важно отметить, что PHP 7.1.0 представил поддержку для указания видимости констант класса .

183
ответ дан 23 November 2019 в 21:19
поделиться

Константа - это просто константа, то есть вы не можете изменить ее значение после объявления.

Статическая переменная доступна без создания экземпляра класса и, следовательно, совместно используется между всеми экземплярами класса.

Кроме того, в функции может быть статическая локальная переменная, которая объявляется только один раз (при первом выполнении функции) и может сохранять свое значение между функциями вызовы, например:

function foo()
{
   static $numOfCalls = 0;
   $numOfCalls++;
   print("this function has been executed " . $numOfCalls . " times");
}
10
ответ дан 23 November 2019 в 21:19
поделиться

Объявление метода или свойства класса как статических делает их доступными без необходимости создания экземпляра класса.

] Константа класса похожа на обычную константу, ее нельзя изменить во время выполнения. Это также единственная причина, по которой вы когда-либо будете использовать const для.

Private, Закрытый означает, что доступ получает только созданный класс. Защищено означает, что созданный класс и производные классы получают доступ.

4
ответ дан 23 November 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: