php:什么时候需要使用self::method()?


php: when need to use self::method()?

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php

class MyClass
{
    public $prop1 ="I'm a class property!";

    public function __construct()
    {
        echo 'The class"', __CLASS__, '" was initiated!<br />';
    }

    public function __destruct()
    {
        echo 'The class"', __CLASS__, '" was destroyed.<br />';
    }

    public function __toString()
    {
        echo"Using the toString method:";
        return $this->getProperty();
    }

    public function setProperty($newval)
    {
        $this->prop1 = $newval;
    }

    public function getProperty()
    {
        return $this->prop1 ."<br />";
    }
}

class MyOtherClass extends MyClass
{
    public function __construct()
    {
        parent::__construct(); // Call the parent class's constructor
        $this->newSubClass();
    }

    public function newSubClass()
    {
        echo"From a new subClass" . __CLASS__ .".<br />";
    }
}

// Create a new object
$newobj = new MyOtherClass;


?>

问题:

如果把$this->newSubClass();改成self::newSubClass();也可以,那么当我需要使用$this->newSubClass();时,什么时候需要使用self::newSubClass();时?


使用self::methodName对该方法进行静态调用。您不能使用$this,因为您不在对象的上下文中。

试试这个:

1
2
3
4
5
6
7
8
9
class Test
{
    public static function dontCallMeStatic ()
    {
         $this->willGiveYouAnError = true;
    }
}

Test::dontCallMeStatic();

您应该得到以下错误:

Fatal error: Using $this when not in object context in...


据我所知,如果您在$this->newSubClass();中使用->,它用于访问对象的实例成员,尽管它也可以访问静态成员,但不鼓励这样的使用。

那么对于这个self::newSubClass();中的::通常用于访问静态成员,但一般来说,这个符号::可以用于范围解析,它可以有类名、父级、自级或(在php 5.3中)静态的。