PHP:静态和非静态函数和对象
这些对象调用之间有什么区别?
非静态:
$var = new Object;
$var->function();
静态的:
$var = User::function();
而且还有一个为什么我应该使用静态属性的函数?class
例:
static public function doSomething(){
...code...
}
这些对象调用之间有什么区别?
非静态:
$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,它将属于$student 1而不是学生。
它也不知道什么是$student 1。
它确实适用于案例 3,因为它是属于该类的静态变量,与前面的 2 不同,它属于必须实例化的对象。