Я наслаждался
В контексте класса статические переменные находятся в области видимости класса (а не объекта), но, в отличие от константы, их значения могут быть изменены.
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 не имеют значения с точки зрения констант (которые всегда публичны); они полезны только для переменных класса, включая статические переменные.
Редактировать: Важно отметить, что PHP 7.1.0 представил поддержку для указания видимости констант класса .
Константа - это просто константа, то есть вы не можете изменить ее значение после объявления.
Статическая переменная доступна без создания экземпляра класса и, следовательно, совместно используется между всеми экземплярами класса.
Кроме того, в функции может быть статическая локальная переменная, которая объявляется только один раз (при первом выполнении функции) и может сохранять свое значение между функциями вызовы, например:
function foo()
{
static $numOfCalls = 0;
$numOfCalls++;
print("this function has been executed " . $numOfCalls . " times");
}
Объявление метода или свойства класса как статических делает их доступными без необходимости создания экземпляра класса.
] Константа класса похожа на обычную константу, ее нельзя изменить во время выполнения. Это также единственная причина, по которой вы когда-либо будете использовать const для.
Private, Закрытый означает, что доступ получает только созданный класс. Защищено означает, что созданный класс и производные классы получают доступ.
И последнее, что следует сделать, это то, что константа всегда статична и общедоступна. Это означает, что вы можете получить доступ к константе из класса следующим образом:
class MyClass
{
const MYCONST = true;
public function test()
{
echo self::MYCONST;
}
}
Из-за пределов класса вы можете получить доступ к ней следующим образом:
echo MyClass::MYCONST;