PHP:静态和非静态函数和对象

2022-08-30 12:40:27

这些对象调用之间有什么区别?

非静态:

$var = new Object;
$var->function();

静态的:

$var = User::function();

而且还有一个为什么我应该使用静态属性的函数?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();
  1. 静态函数无法知道$this,因为它是静态的。如果可以有一个$this,它将属于$student 1而不是学生。

  2. 它也不知道什么是$student 1。

  3. 它确实适用于案例 3,因为它是属于该类的静态变量,与前面的 2 不同,它属于必须实例化的对象。


推荐