Вы всегда должны использовать static, когда вам не нужен объект вокруг вашего метода, и использовать динамический, когда вам нужен объект. В приведенном вами примере вам не нужен объект, потому что метод не взаимодействует ни с какими свойствами или полями в вашем классе.
Этот должен быть статическим, потому что ему не нужен объект:
class Person {
public static function GetPersonByID($id) {
//run SQL query here
$res = new Person();
$res->name = $sql["name"];
//fill in the object
return $res;
}
}
Этот должен быть динамическим, потому что он использует объект, в котором он находится:
class Person {
public $Name;
public $Age;
public function HaveBirthday() {
$Age++;
}
}
Разница в скорости минимальна, но вы должны создать объект для запуска динамических методов, и этот объект будет сохранен в памяти, поэтому динамические методы используют больше памяти и немного больше времени.