За последние 24 часа нас посетили 55826 программистов и 1798 роботов. Сейчас ищут 858 программистов ...

ругается на $this

Тема в разделе "PHP для новичков", создана пользователем krow7, 13 авг 2011.

  1. krow7

    krow7 Активный пользователь

    С нами с:
    12 авг 2009
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    из Азии
    написал вот так:
    PHP:
    1. <?php
    2. class settings
    3. {
    4.     var $mysql=array
    5.     (
    6.         'host'  =>  'localhost',
    7.         'user'  =>  'user',
    8.         'pass'  =>  'pass',
    9.         'base'  =>  'test',
    10.     );
    11.    
    12.     function give_mysql()
    13.     {
    14.         return $this->mysql;
    15.     }
    16. }
    17. settings::give_mysql();
    18. ?>
    при запуске выдает: Fatal error: Using $this when not in object context in C:\Program Files\xampp\htdocs\class\test.php on line 26
    где я ошибся?
     
  2. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    $this - обращение к текущему экземпляру (объекту) класса.
    При статическом обращении экземпляры не создаются.

    Т.е. или return self::$mysql
    или $a = new settings(); $a->give_mysql();
     
  3. krow7

    krow7 Активный пользователь

    С нами с:
    12 авг 2009
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    из Азии
    а где можно про это почитать разборчиво?
    я так и не могу понять, когда нужно со стрелочкой вызывать, а когда с двумя двоеточиями :(
     
  4. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    статик написано в объявлении метода. статики вызываются с двоеточием.
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    новичков сбивает с толку, что в доках и в сообщениях об ошибке может встретиться "Class::method" приэтом имеется в виду НЕстатический вызов $o->method(). просто разработчики так привыкли.

    нелогичность №0. документация.
    пример: http://php.net/SoapServer
    весь Table of Contents описан с ::, а методы НЕстатические

    нелогичность №1. сообщения об ошибках
    PHP:
    1. <?php
    2. $a = new A();
    3. $a->bar(); // обращение к ЭКЗЕМПЛЯРУ класса
    4.  
    ошибка: "Call to undefined method A::bar()" выглядит так, как будто мы обращались к статическому методу

    нелогичность №2. синтаксис обращения к перекрытому методу:
    PHP:
    1. <?php
    2. class B extends A
    3. {
    4.   function bar()
    5.   {
    6.     parent::bar(); // это правильно, хотя обращаемся к НЕстатическому методу
    7.   }
    8. }
    9.  
    но это исключения, которые надо выучить. а так - :: применимо только к тому, что объявлено как static
     
  7. krow7

    krow7 Активный пользователь

    С нами с:
    12 авг 2009
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    из Азии
    artoodetoo, вот теперь окончательно вкурил) спасибо за разъяснения.