Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > В чем отличия указателя self от this?


Автор: romantik2011 27.7.2011, 19:24
В чем отличия указателя self от this? Что-то не совсем ясно.

Автор: azesmcar 27.7.2011, 19:26
$this - текущий объект
self - текущий класс

Автор: romantik2011 27.7.2011, 19:36
А какой прикол от этого на текущий объект или текущий класс?

Автор: azesmcar 27.7.2011, 19:52
Класс - это тип.
Код

class X {};
// X это класс.
$obj = new X(); // объект этого класса

для обычных функций вызываешь
Код

$this->func();

для статических
Код

self::func();


Автор: romantik2011 27.7.2011, 20:12
Так можно обращаться к статическим методам и свойствам класса без ключевого слова SELF и всё равно интерпретатор не выдаёт ошибок.

Автор: azesmcar 27.7.2011, 21:33
Цитата(romantik2011 @  27.7.2011,  20:12 Найти цитируемый пост)
Так можно обращаться к статическим методам и свойствам класса без ключевого слова SELF и всё равно интерпретатор не выдаёт ошибок. 

где?
http://codepad.org/WKaeJszx

Автор: capitan 16.8.2011, 18:07
Предыдущая проблема решилась. Появилась следующая.
Если делать дамп $this получаем
Код

object(AdvUserReviews)#173 (4) {
  ["data"]=>
  array(0) {
  }
  ["plugin_name"]=>
  string(25) ".......php"
  ["plugin_url"]=>
  string(56) "http://............../"
  ["tbl_adv_reviews"]=>
  string(14) "wp_adv_reviews"
}

а если self::$_instance 
Код

object(AdvUserReviews)#173 (0) {
}

Хотя все переменные доступны. Т.е. отдельно делаю дамп self::plugin_name - все ок. Где хранится весь объект?

ksnk - прошу прощения, что стер свой пост. Сам дошел до того, что Вы мне подсказали. Думал никто не ответил, сотру.

Автор: ksnk 16.8.2011, 18:45
в статическом методе не бывает this. Статические методы, это навроде namespace...

В примере нужно пользоваться следами от функции init. self::$_instance и будет тем самым this, который требуется. кстати, указатель не обязателен. Объекты в php5 передаются по указателю.

Автор: hunterman 18.8.2011, 07:36
Если есть немного знания английского то можно тут почитать ответы

http://www.phpbuilder.com/board/showpost.php?p=10866222&postcount=4
http://stackoverflow.com/questions/151969/php-self-vs-this

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)