1
<?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();

4

2 回答 2

3

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

试试这个

class Test
{
    public static function dontCallMeStatic ()
    {
         $this->willGiveYouAnError = true;
    }
}

Test::dontCallMeStatic();

您应该收到以下错误:

致命错误:当不在对象上下文中时使用 $this...

于 2013-08-21T02:59:24.443 回答
1

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

然后 for this ::inself::newSubClass();通常用于访问静态成员,但通常此符号::可用于范围解析,它的左侧可能有类名、父级、自身或(在 PHP 5.3 中)静态。

于 2013-08-21T03:05:56.260 回答