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
Форумы портала PHP.SU :: Версия для печати :: что лучше и удобней?
Форумы портала PHP.SU » » Объектно-ориентированное программирование » что лучше и удобней?

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

1. Bio man - 29 Сентября, 2011 - 19:22:04 - перейти к сообщению
что лучше для не статических данных? статические данные понятное дело не вызовешь через $this->(в том числе и константы). может $this-> лучше, так как лучше документирует? ваши советы
2. caballero - 29 Сентября, 2011 - 19:38:00 - перейти к сообщению
статичечкие данные можно вызвать и через $this-> и через self::

хотя следовало бы прояснить что за данные и где
3. Bio man - 29 Сентября, 2011 - 19:43:34 - перейти к сообщению
caballero пишет:
статичечкие данные можно вызвать и через $this-> и через self::

неа
Цитата:
Notice: Undefined property: database::$instance
4. caballero - 29 Сентября, 2011 - 21:19:19 - перейти к сообщению
значит нет такой статической проперти
5. Bio man - 30 Сентября, 2011 - 07:04:01 - перейти к сообщению
caballero пишет:
значит нет такой статической проперти
такая ошибка при вызове вне класса, в классе не пробовал так сделать. В пхп6 нельзя будет обращатся к не статике через селф::
6. DeepVarvar - 30 Сентября, 2011 - 07:11:37 - перейти к сообщению
Bio man пишет:
может $this-> лучше
Чем он лучше то? А чем хуже? Символов меньше?
Bio man пишет:
В пхп6 нельзя будет обращатся к не статике через селф::
Вы сами ответили на вопрос.
Одна конструкция используется в одном случае, другая в другом..
Что лучше - носки на босу ногу, или две пары перчаток?
7. MrBeard - 30 Сентября, 2011 - 09:21:20 - перейти к сообщению
self - указание на сам класс. this - указание на объект, конкретный экземпляр данного класса. интересно, по какому критерию вы их собираетесь сравнивать)))
8. EuGen - 30 Сентября, 2011 - 09:46:01 - перейти к сообщению
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
9. DeepVarvar - 30 Сентября, 2011 - 09:54:51 - перейти к сообщению
EuGen пишет:
но все же проверил
Правильно - перчатки на ступни не натянешь Радость
10. Stierus - 30 Сентября, 2011 - 09:56:59 - перейти к сообщению
Цитата:
self - указание на сам класс
никакое это не указание. Внутри функций класса (статический или нет - не важно) self:: заменяется на ClassName:: .Это сделано на случай, если класс переименуется, что бы не изменять в коде все вызовы статических методов и обращения к статическим свойствам. Иными словами self::$x равносильно ClassName::$x . Это используется при работе исключительно со статическими свойствами и методами.

$this - это экземпляр объекта. Вы сравниваете совершенно разные вещи.
11. MrBeard - 30 Сентября, 2011 - 10:01:55 - перейти к сообщению
Static Keyword
Цитата:
Static properties cannot be accessed through the object using the arrow operator ->.

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

ну не указание, а указатель, ссылка. может, не так выразился, звиняйте)
12. Мелкий - 30 Сентября, 2011 - 10:25:00 - перейти к сообщению
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;
13. MrBeard - 30 Сентября, 2011 - 10:33:23 - перейти к сообщению
проверил, возможен. Ошибся, думал, что для доступа статическим методам нужно тоже использовать ссылку на класс.
А в документации ни слова, и единственный предоставленный метод доступа - через имя класса.(тупо предполагаю) Может, они собираются выпилить в дальнейшем возможность обращения к статическим методам через объект?

и ещё, только из комментов вычитал про отличие доступа к свойствам
PHP:
скопировать код в буфер обмена
  1.  
  2. self::$property
  3. static::$property
  4.  
14. Stierus - 30 Сентября, 2011 - 10:39:13 - перейти к сообщению
Какая разница, возможно или нет? Есть четкое разделение, когда как нужно делать - так и делайте ... хотя бы для того что бы не выглядеть идиотом в лице коллег.
15. MrBeard - 30 Сентября, 2011 - 10:59:32 - перейти к сообщению
Цитата:
Есть четкое разделение, когда как нужно делать - так и делайте

когда есть чёткое разделение, о нём обычно пишут в документации. точно так же, как и о доступных, но не рекомендованных или устаревших способах.
В данном случае в документации этот момент опущен(как мне кажется), что и удивляет.

 

Powered by ExBB FM 1.0 RC1