2013-09-20 8 views
0

Этот вопрос может показаться немым, но оба ($ this и self) работают, чтобы вызвать статический метод.Хороший способ вызова частного статического метода?

Однако, что является правильным способом?

Я лично склонен использовать «я», потому что частный статический метод похож на функцию полезности, которая не использует никаких состояний объекта.

$data = self::calcSoldeNextMonths('sl', $data, $toSub); 
$data = $this->calcSoldeNextMonths('sl', $data, $toSub); 
+0

http://stackoverflow.com/questions/151969/when-to-use-self-vs-this. Итак, для статического, это для нестатического – Kakawait

+0

Является ли объявление частных статических методов имеющим смысл? Я всегда использую общедоступный статический метод :) – Adam

+1

все статические методы должны быть вызваны с помощью 'static' или' self' – Shushant

ответ

3

Я, лично, предпочел бы self::, как он сразу же говорит мне, что я имею дело со статическим методом. Это, конечно, не было бы много удовольствия копаться кода, где я должен был бы постоянно искать объявления функций, просто чтобы убедиться, что контекст этот метод работает.

EDIT Пожалуйста см @ ссылку Kakawait в первый комментарий: When to use self vs this. Проверьте второй наиболее ответный ответ на последствия, используя self (а именно, разрешение области).

+0

Мне просто кажется странным, что сообщение об ошибке/уведомлении не отображается, когда $ используется для вызова статического метода. – gaetanm

+1

Ну, еще один причуда PHP, чтобы пообщаться с хорошими людьми. – aefxx

1

Статические методы должны вызываться только с статическими :: или самоуправления ::

самоуправления :: означает класс и this-> означает текущий объект. И по определению статические методы являются методами независимого класса объектов, я предпочитаю использовать самостоятельно ::

+0

Не совсем, есть также ключевое слово 'static ::' для рассмотрения с PHP версии 5.3 и выше. – aefxx

+0

@aefxx 'static' используется для поздних статических привязок, которые могут использоваться для ссылки на вызываемый класс в контексте статического наследования, пожалуйста, обратитесь к http://php.net/manual/en/language.oop5.late-static- bindings.php – Shushant

+0

@Shushant Ответчик отредактировал свой ответ. Сначала он заявил, что: «[...] единственный правильный путь - это самость: * * **. Это не совсем так, как я только что указал. – aefxx

0

здесь простой пример, который дифференцироваться self и static и простой способ запомнить разные б/ш оба

self возвращает базовый экземпляр базового объекта (где self вызывается)

Статический возвращает текущий экземпляр объекта (либо объект расширен).

class BaseClass { 

public function make() 
{ 
    echo __METHOD__, "\n"; 
} 

public function println() 
{ 
    static::make(); 
} 
} 

class BaseClass2{ 

public function make() 
{ 
    echo __METHOD__, "\n"; 
} 

public function println() 
{ 
    self::make(); 
} 
} 

class StaticClass extends BaseClass{ 

public function make() 
{ 
    echo __METHOD__; 
} 
} 

class selfMain extends BaseClass2{ 
public function make() 
{ 
    echo __METHOD__; 
} 
} 
$obj = new StaticClass(); 
$obj->println();//return the current instance of object 

$obj = new selfMain(); 
$obj->println();//return the best instance of object 
+0

Спасибо за этот подробный ответ, но я знаю, в чем разница между '$ this' и' self'. Это не вопрос. – gaetanm

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