Статичные переменные и методы нужно использовать, когда нет экземпляра.
Student::$total_students
Student::welcome_students()
self::$total_students++
Статичные методы должны идти вместе и вызывать статичные вещи. Не смешивайте статичные и нестатичные методы.
<?php
// Статичные переменные и методы используют, когда у нас нет экземпляра. Например, общее кол-во студентов.
// Или это очень простая информация о классе: новички, второкурсники и старшие курсы.
// Со статичными методами нельзя использовать $this
class Student {
static $total_students = 0;
// Обычно мы пишем так:
public function add_students() {
$this->total_students++;
}
// со статичными методами пишем так:
static public function add_student() {
self::$total_students++;
}
static function welcome_students($var="Hello") {
echo "{$var} students.";
}
}
// У нас есть доступ к $total_students и welcome_students даже, если у нас нет экземпляра.
/*
Обычно пишем:
$student = new Student();
echo $student->total_students;
Но не со статичными переменными:
*/
echo Student::$total_students . "<br />";
echo Student::welcome_students() . "<br />";
// Статичные переменные разделяются в дереве наследования.
// Это запутывает.
class One {
static $foo;
}
class Two extends One {}
class Three extends One{}
One::$foo = 1;
Two::$foo = 2;
Three::$foo = 3;
echo One::$foo; // 3
echo Two::$foo; // 3
echo Three::$foo; // 3
?>
Student::$total_students
Student::welcome_students()
self::$total_students++
Статичные методы должны идти вместе и вызывать статичные вещи. Не смешивайте статичные и нестатичные методы.
<?php
// Статичные переменные и методы используют, когда у нас нет экземпляра. Например, общее кол-во студентов.
// Или это очень простая информация о классе: новички, второкурсники и старшие курсы.
// Со статичными методами нельзя использовать $this
class Student {
static $total_students = 0;
// Обычно мы пишем так:
public function add_students() {
$this->total_students++;
}
// со статичными методами пишем так:
static public function add_student() {
self::$total_students++;
}
static function welcome_students($var="Hello") {
echo "{$var} students.";
}
}
// У нас есть доступ к $total_students и welcome_students даже, если у нас нет экземпляра.
/*
Обычно пишем:
$student = new Student();
echo $student->total_students;
Но не со статичными переменными:
*/
echo Student::$total_students . "<br />";
echo Student::welcome_students() . "<br />";
// Статичные переменные разделяются в дереве наследования.
// Это запутывает.
class One {
static $foo;
}
class Two extends One {}
class Three extends One{}
One::$foo = 1;
Two::$foo = 2;
Three::$foo = 3;
echo One::$foo; // 3
echo Two::$foo; // 3
echo Three::$foo; // 3
?>
Комментариев нет:
Отправить комментарий