Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: что лучше и удобней?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Опрос
self:: или $this->
Для голосования и просмотра результатов опроса войдите или зарегистрируйтесь

> Описание: self:: или $this->
Bio man
Отправлено: 29 Сентября, 2011 - 19:22:04
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




что лучше для не статических данных? статические данные понятное дело не вызовешь через $this->(в том числе и константы). может $this-> лучше, так как лучше документирует? ваши советы
 
 Top
caballero
Отправлено: 29 Сентября, 2011 - 19:38:00
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




статичечкие данные можно вызвать и через $this-> и через self::

хотя следовало бы прояснить что за данные и где


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Bio man
Отправлено: 29 Сентября, 2011 - 19:43:34
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




caballero пишет:
статичечкие данные можно вызвать и через $this-> и через self::

неа
Цитата:
Notice: Undefined property: database::$instance

(Отредактировано автором: 29 Сентября, 2011 - 21:06:04)

 
 Top
caballero
Отправлено: 29 Сентября, 2011 - 21:19:19
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




значит нет такой статической проперти


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Bio man
Отправлено: 30 Сентября, 2011 - 07:04:01
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




caballero пишет:
значит нет такой статической проперти
такая ошибка при вызове вне класса, в классе не пробовал так сделать. В пхп6 нельзя будет обращатся к не статике через селф::
 
 Top
DeepVarvar Супермодератор
Отправлено: 30 Сентября, 2011 - 07:11:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Bio man пишет:
может $this-> лучше
Чем он лучше то? А чем хуже? Символов меньше?
Bio man пишет:
В пхп6 нельзя будет обращатся к не статике через селф::
Вы сами ответили на вопрос.
Одна конструкция используется в одном случае, другая в другом..
Что лучше - носки на босу ногу, или две пары перчаток?
 
 Top
MrBeard
Отправлено: 30 Сентября, 2011 - 09:21:20
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2011  


Помог: 2 раз(а)




self - указание на сам класс. this - указание на объект, конкретный экземпляр данного класса. интересно, по какому критерию вы их собираетесь сравнивать)))
 
 Top
EuGen Администратор
Отправлено: 30 Сентября, 2011 - 09:46:01
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




caballero пишет:
статичечкие данные можно вызвать и через $this-> и через self::

Давно ли? Я подумал, что может, я что-то позабыл, но все же проверил:
PHP:
скопировать код в буфер обмена
  1. class Test
  2. {
  3.    public static $selfProp='foo';
  4.    public $thisProp='bar';
  5.  
  6.    function baz()
  7.    {
  8.       var_dump(self::$selfProp);
  9.       var_dump($this->selfProp);    
  10.    }
  11.  
  12. }
  13.  
  14. $test=new Test();
  15. $test->baz();

is
CODE (htmlphp):
скопировать код в буфер обмена
  1. string(3) "foo"
  2. Notice: Undefined property: Test::$selfProp in {***} on line 9
  3. NULL


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DeepVarvar Супермодератор
Отправлено: 30 Сентября, 2011 - 09:54:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




EuGen пишет:
но все же проверил
Правильно - перчатки на ступни не натянешь Радость
 
 Top
Stierus Супермодератор
Отправлено: 30 Сентября, 2011 - 09:56:59
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Цитата:
self - указание на сам класс
никакое это не указание. Внутри функций класса (статический или нет - не важно) self:: заменяется на ClassName:: .Это сделано на случай, если класс переименуется, что бы не изменять в коде все вызовы статических методов и обращения к статическим свойствам. Иными словами self::$x равносильно ClassName::$x . Это используется при работе исключительно со статическими свойствами и методами.

$this - это экземпляр объекта. Вы сравниваете совершенно разные вещи.
 
My status
 Top
MrBeard
Отправлено: 30 Сентября, 2011 - 10:01:55
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2011  


Помог: 2 раз(а)




Static Keyword
Цитата:
Static properties cannot be accessed through the object using the arrow operator ->.

интересно, почему написано только о свойствах. доступ к статическим методам через объект тоже ведь невозможен)
(Добавление)
Цитата:
никакое это не указание. Внутри функций класса (статический или нет - не важно) self:: заменяется на ClassName:: .

ну не указание, а указатель, ссылка. может, не так выразился, звиняйте)
 
 Top
Мелкий Супермодератор
Отправлено: 30 Сентября, 2011 - 10:25:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




MrBeard пишет:
доступ к статическим методам через объект тоже ведь невозможен)

Возможен. Почему нет?
PHP:
скопировать код в буфер обмена
  1. class foo {
  2. public static function bar() {
  3. echo 'bar';
  4. }
  5. public function __construct() {
  6. $this->bar();
  7. }
  8. }
  9.  
  10. $a = new foo;


-----
PostgreSQL DBA
 
 Top
MrBeard
Отправлено: 30 Сентября, 2011 - 10:33:23
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2011  


Помог: 2 раз(а)




проверил, возможен. Ошибся, думал, что для доступа статическим методам нужно тоже использовать ссылку на класс.
А в документации ни слова, и единственный предоставленный метод доступа - через имя класса.(тупо предполагаю) Может, они собираются выпилить в дальнейшем возможность обращения к статическим методам через объект?

и ещё, только из комментов вычитал про отличие доступа к свойствам
PHP:
скопировать код в буфер обмена
  1.  
  2. self::$property
  3. static::$property
  4.  

(Отредактировано автором: 30 Сентября, 2011 - 10:41:33)

 
 Top
Stierus Супермодератор
Отправлено: 30 Сентября, 2011 - 10:39:13
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Какая разница, возможно или нет? Есть четкое разделение, когда как нужно делать - так и делайте ... хотя бы для того что бы не выглядеть идиотом в лице коллег.
 
My status
 Top
MrBeard
Отправлено: 30 Сентября, 2011 - 10:59:32
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2011  


Помог: 2 раз(а)




Цитата:
Есть четкое разделение, когда как нужно делать - так и делайте

когда есть чёткое разделение, о нём обычно пишут в документации. точно так же, как и о доступных, но не рекомендованных или устаревших способах.
В данном случае в документации этот момент опущен(как мне кажется), что и удивляет.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB