2013-08-21 64 views
0
<?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; 


?> 

問:php:何時需要使用self :: method()?

如果改變$this->newSubClass();self::newSubClass();,它也可以,所以,當我需要使用$this->newSubClass();,當需要使用self::newSubClass();

+1

self ::用於靜態方法/ $這是在obj本身上使用的。 –

+0

和'self'幾乎不是你的意思,通常你想用'static'。查看[晚期靜態綁定]的信息(http://php.net/manual/en/language.oop5.late-static-bindings.php) – Orangepill

回答

2

使用self::methodName會對該方法進行靜態調用。您不能使用$this,因爲您不在對象的上下文中。

Try this

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

Test::dontCallMeStatic(); 

你應該得到以下錯誤:

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

0

據我所知,如果你在$this->newSubClass();使用->它用於訪問對象的實例成員altough它也可以訪問靜態成員,但不鼓勵這種用法。

然後爲此::self::newSubClass();通常用於訪問靜態成員,但一般這個符號::可用於scope resolution並且它可以具有一個類名稱,父,自我,或(在PHP 5.3)靜態到它的左邊。