PHP: статические и нестатические функции и объекты
Какая разница между этими вызовами объекта?
Нестатический:
$var = new Object;
$var->function();
Static
$var = User::function();
А также внутри a class
зачем использовать статическое свойство для функций?
Пример:
static public function doSomething(){
...code...
}
Ответы
Ответ 1
Статические функции по определению не могут и не зависят от каких-либо свойств экземпляра класса. То есть, они не требуют экземпляра класса для выполнения (и поэтому могут выполняться, как вы показали, без создания экземпляра). В некотором смысле это означает, что функция не может (и никогда не понадобится) зависеть от членов или методов (открытых или закрытых) класса.
Ответ 2
Разница находится в области переменных. Представьте, что у вас есть:
class Student{
public $age;
static $generation = 2006;
public function readPublic(){
return $this->age;
}
public static function readStatic(){
return $this->age; // case 1
return $student1->age; // case 2
return self::$generation; // case 3
}
}
$student1 = new Student();
Student::readStatic();
-
Статическая функция не может знать, что такое $this, потому что она статична. Если бы это могло быть $this, это принадлежало бы $student1, а не Student.
-
Он также не знает, что такое $student1.
-
Это работает для случая 3, потому что это статическая переменная, принадлежащая классу, в отличие от предыдущих 2, которые принадлежат объектам, которые должны быть созданы.
Ответ 3
Статические методы и члены принадлежат самому классу, а не экземпляру класса.
Ответ 4
Статические функции или поля не зависят от инициализации; следовательно, статический.
Ответ 5
Вопросы относительно функций STATIC продолжают возвращаться.
Статические функции по определению не могут и не зависят от каких-либо свойств экземпляра класса. То есть, они не требуют экземпляра класса для выполнения (и поэтому могут быть выполнены.
В некотором смысле это означает, что функция не может (и никогда не понадобится) зависеть от членов или методов (открытых или закрытых) класса.
class Example {
// property declaration
public $value = "The text in the property";
// method declaration
public function displayValue() {
echo $this->value;
}
static function displayText() {
echo "The text from the static function";
}
}
$instance = new Example();
$instance->displayValue();
$instance->displayText();
// Example::displayValue(); // Direct call to a non static function not allowed
Example::displayText();