PHP: статические и нестатические функции и объекты

В чем разница между этими объектными вызовами?

Нестатический:

$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(); 
  1. Статическая функция не может знать, что такое $ this, потому что она статична. Если бы это могло быть $ this, это принадлежало бы $ student1, а не Student.

  2. Он также не знает, что такое $ student1.

  3. Это работает для случая 3, потому что это статическая переменная, принадлежащая классу, в отличие от предыдущих 2, которые принадлежат объектам, которые должны быть созданы.