2013-08-21 2 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 :: is use on static methods/$ this используется для самого 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) статического его левой.

Смежные вопросы