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

时间:2010-12-05 22:19:23

标签: php static

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

非静态:

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

静态:

$var = User::function();

并且在class内部为什么我应该为函数使用静态属性?

示例:

static public function doSomething(){
    ...code...
}

5 个答案:

答案 0 :(得分:38)

根据定义,静态函数不能也不依赖于类的任何实例属性。也就是说,它们不需要执行类的实例(因此可以在没有首先创建实例的情况下执行,因此可以执行)。从某种意义上说,这意味着该函数不会(并且永远不需要)依赖于类的成员或方法(公共或私有)。

答案 1 :(得分:10)

差异在于变量范围。想象一下你有:

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不同,属于必须实例化的对象。

答案 2 :(得分:7)

静态方法和成员属于类本身,而不属于类的实例。

答案 3 :(得分:7)

静态函数或字段不依赖于初始化;因此,静态。

答案 4 :(得分:1)

有关STATIC功能的问题不断回归。

根据定义,静态函数不能也不依赖于类的任何实例属性。也就是说,它们不需要执行类的实例(因此可以执行。 从某种意义上说,这意味着该函数不会(并且永远不需要)依赖于类的成员或方法(公共或私有)。

class Example {

    // property declaration
    public $value = "The text in the property";

    // method declaration
    public function displayValue() {
        echo $this->value;
    }

    static function displayText() {
        echo "The text from the static function";
    }
}


$instance = new Example();
$instance->displayValue();

$instance->displayText();

// Example::displayValue();         // Direct call to a non static function not allowed

Example::displayText();