开发者

PHP: Static and non Static functions and Objects

What's the difference between these object callings?

Non Static:

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

Static:

$var = User::function();

And also inside a class why should I use the stat开发者_如何学编程ic property for functions?

example:

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


Static functions, by definition, cannot and do not depend on any instance properties of the class. That is, they do not require an instance of the class to execute (and so can be executed as you've shown without first creating an instance). In some sense, this means that the function doesn't (and will never need to) depend on members or methods (public or private) of the class.


Difference is in the variable scope. Imagine you have:

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. You static function cannot know what is $this because it is static. If there could be a $this, it would have belonged to $student1 and not Student.

  2. It also doesn't know what is $student1.

  3. It does work for case 3 because it is a static variable that belongs to the class, unlike previous 2, which belong to objects that have to be instantiated.


Static methods and members belong to the class itself and not to the instance of a class.


Static functions or fields does not rely on initialization; hence, static.


Questions regarding STATIC functions keep coming back.

Static functions, by definition, cannot and do not depend on any instance properties of the class. That is, they do not require an instance of the class to execute (and so can be executed. In some sense, this means that the function doesn't (and will never need to) depend on members or methods (public or private) of the class.

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();
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜