Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить доступ к статическому полю 
V
    Опции темы
Royan
  Дата 27.7.2007, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Имеем:

Код

class SQLConnection {
    protected static $linkId = null;
 
    function SQLConnection ($serverName, $login="", $password="", $dbName) {
        //...
        $linkId = mysql_connect($serverName, $login, $password);

        $this->show($linkId);
    }

    public function show($l) {
        echo MySQLDatabase::$linkId;
        echo $this->linkId;
        echo $linkId;
        echo $l;
    }
}


Объясните почему ни один из способов обращения к полю не работает????


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Daevaorn
Дата 27.7.2007, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: нет
Всего: 70



Цитата(Royan @  27.7.2007,  01:01 Найти цитируемый пост)
class SQLConnection {

Цитата(Royan @  27.7.2007,  01:01 Найти цитируемый пост)
 echo MySQLDatabase::$linkId;

не находишь это странным?
PM MAIL WWW   Вверх
sTa1kEr
Дата 27.7.2007, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(Daevaorn @  27.7.2007,  00:27 Найти цитируемый пост)

не находишь это странным? 

Вообще-то это правильная конструкция. Доступ к статическим полям класса можно получить именно таким способом с $.  Если написать MySQLDatabase::linkId, то PHP будет искать константу этого класса.

Цитата(Royan @  27.7.2007,  00:01 Найти цитируемый пост)
        echo $this->linkId;

Это не правильно, т.к. поле статическое, а значит существует только один экземпляр для класса, а не для  каждого объекта.

Цитата(Royan @  27.7.2007,  00:01 Найти цитируемый пост)
        echo $linkId;

Тоже не правильно, PHP будет выводить локальную переменную $linkId, которой не существует.

Цитата(Royan @  27.7.2007,  00:01 Найти цитируемый пост)
        echo $l;

Правильно, т.к. $l передается через параметр.

Цитата(Royan @  27.7.2007,  00:01 Найти цитируемый пост)
Объясните почему ни один из способов обращения к полю не работает???? 

А не выводит ничего, возможно, потому что mysql_connect() возвращает false. Попробуйте вместо echo использовать var_dump()
PM MAIL   Вверх
Daevaorn
Дата 27.7.2007, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: нет
Всего: 70



Цитата(sTa1kEr @  27.7.2007,  01:55 Найти цитируемый пост)
Вообще-то это правильная конструкция. Доступ к статическим полям класса можно получить именно таким способом с $.  Если написать MySQLDatabase::linkId, то PHP будет искать константу этого класса.

а ничего что имена классов разные?
PM MAIL WWW   Вверх
sTa1kEr
Дата 27.7.2007, 01:16 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(Daevaorn @  27.7.2007,  01:00 Найти цитируемый пост)
а ничего что имена классов разные? 

Прошу прощенья, на это-то я и не обратил внимание. По этой причине внутри класса лучше использовать ссылку self
Код

self::$linkId;

PM MAIL   Вверх
Royan
Дата 27.7.2007, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Народ я извиняюсь за MySQLDatabase это опечатка. Я просто стремился упростить свой пример и проглядел, навзание... В оригинале я получаю абсолютно валидный декриптор коннекции. Суть даже не в том что находится в поле, а суть в том, что я не могу получить значение статического поля. Я еще не пробовал вариант с self, но обязательно попробую когда приду домой.


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
sTa1kEr
Дата 27.7.2007, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(Royan @  27.7.2007,  10:19 Найти цитируемый пост)
Я еще не пробовал вариант с self, но обязательно попробую когда приду домой. 

Так же замените 6ую строчку на
Код

self::$linkId = mysql_connect($serverName, $login, $password);

PM MAIL   Вверх
Mal Hack
Дата 27.7.2007, 20:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Вот за что я люблю доуоментацию...
http://www.php.net/manual/ru/language.oop5.static.php
PM ICQ   Вверх
Royan
Дата 27.7.2007, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Всем спасибо, отдельное спасибо sTa1kEr'у! Проблема решена.


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3362 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.