Я нашел различную информацию о статических переменных в PHP, но ничего, что на самом деле объясняет, что это такое и как это на самом деле работает.
Я читал, что когда используется внутри класса, что статическое свойство не может быть использовано каким-либо объектом, инстанцированным этим классом, и что статический метод может быть использован объектом, инстанцированным этим классом?
Однако я пытался исследовать, что делает статическая переменная внутри функции, которая не находится в классе. Также, работает ли статическая переменная внутри функции как закрытие в javascript или я полностью отключен в этом предположении?
Я читал, что при использовании в классе статическое свойство не может использоваться никаким объектом, созданным этим классом
Это зависит от того, что вы подразумеваете под этим. Например:
class Foo {
static $my_var = 'Foo';
}
$x = new Foo();
echo $x::$my_var; // works fine
echo $x->my_var; // doesn't work - Notice: Undefined property: Foo::$my_var
и что статический метод может использоваться объектом, созданным классом ???
Да, экземпляр объекта, принадлежащий классу, может получить доступ к статическому методу.
Ключевое слово static
в контексте классов ведет себя подобно статическим переменным класса в других языках. Объявленный static
член (метод или переменная) связан с классом, а не с экземпляром этого класса. Таким образом, вы можете получить к нему доступ без экземпляра класса (например: в приведенном выше примере я мог бы использовать Foo::$my_var
)
Однако я пытался исследовать, что такое статический Переменная делает внутри функции, которой нет в классе.
Кроме того, статическая переменная внутри функции работает как закрытие в javascript или я полностью отключен в этом предположении.
Вне классов (то есть: в функциях) переменная static
- это переменная, которая не теряет своего значения при выходе из функции. В некотором смысле, да, они работают как замыкания в JavaScript.
Но в отличие от JS-замыканий, существует только одно значение для переменной, которое поддерживается при разных вызовах одной и той же функции. Из примера руководства по PHP:
function test()
{
static $a = 0;
echo $a;
$a++;
}
test(); // prints 0
test(); // prints 1
test(); // prints 2
static
ключевое слово (в классах) , (в функциях) Статическая переменная в функции инициализируется только при первом вызове этой функции в запущенном скрипте.
class Student {
static $total_student = 0;
static function add_student(){
return Student::$total_student++;
}
}
Во-первых: для функции add_student рекомендуется использовать static, а не public. Второе: в функции add_student мы используем Student :: $ total_student, а не использовать $ this-> total_student. Это сильно отличается от обычной переменной. В-третьих: статические переменные являются общими для всего дерева наследования.
возьмите приведенный ниже код, чтобы увидеть результат:
class One {
static $foo ;
}
class Two extends One{}
class Three extends One{}
One::$foo = 1;
Two::$foo = 2;
Three::$foo = 3;
echo One::$foo;
echo Two::$foo;
echo Three::$foo;`