В чем разница между этими объектными вызовами?
Нестатический:
$var = new Object; $var->function();
Статическая:
$var = User::function();
А также внутри class
почему я должен использовать статическое свойство для функций?
пример:
static public function doSomething(){ ...code... }
Статические функции по определению не могут и не зависят от каких-либо свойств экземпляра класса. То есть, они не требуют экземпляра класса для выполнения (и поэтому могут выполняться, как вы показали, без создания экземпляра). В некотором смысле это означает, что функция не может (и никогда не понадобится) зависеть от членов или методов (открытых или закрытых) класса.
Статические методы и члены принадлежат самому классу, а не экземпляру класса.
Статические функции или поля не зависят от инициализации; следовательно, статический.
Разница в переменной области. Представьте, что у вас есть:
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, которые принадлежат объектам, которые должны быть созданы.