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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обратиться к функции класса 
V
    Опции темы
dipsy
Дата 6.10.2006, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 13.1.2005
Где: Нижний Новгород

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



пусть класс называется axe, тогда если я нахожусь вне класса, то можно вызвать функцию класса, не инициализируя объект:
  $par_Fields    = axe::ChangeArray( $par_Fields );

если же я нахожусь внутри класса, то для того, чтобы обратиться к функции этого же класса необходимо использовать указатель $this:
  $par_Fields    = $this->ChangeArray( $par_Fields );
при этом требуется, чтобы объект был инициализирован.

Вопрос: Можно ли обратиться к функции класса из самого класса, не инициализируя объект?
PM MAIL WWW   Вверх
skyboy
Дата 6.10.2006, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

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



Цитата(dipsy @  6.10.2006,  09:55 Найти цитируемый пост)
Можно ли обратиться к функции класса из самого класса, не инициализируя объект? 

а теперь поясни, что такое "обратиться к функции класса из самого класса". ты хочешь вызвать методы класса из методов класса? пожалуйста. 
или ты хочешь вызывать методы класса из объекта, который неинициализирован?
PM MAIL   Вверх
dipsy
Дата 6.10.2006, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 13.1.2005
Где: Нижний Новгород

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



положим, есть класс:
Код

class axe{
function axe1(){
}
function axe2(){
   $this->axe1();
}
}
axe::axe1(); // будет работать
axe::axe2(); // вызовет ошибку.

вопрос был в том, как обойти ошибку.
Код

class axe{
function axe1(){
}
function axe2(){
   axe::axe1();
}
}
axe::axe2();

я так понял, что так работает.
теперь вопрос в другом - можно ли и стоит ли использовать такую конструкцию и почему?
PM MAIL WWW   Вверх
sergejzr
Дата 6.10.2006, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Такую конструкцию можно и стоит использовать, если вызываемая функция статическая. (иначе надо использовать $this, ведь реализация не статической функции разнИца от класса к классу, а результат работы от обьекта к обьекту)

При статитечских функциях дело обстоит несколько иначе. Она одинакого для всех обьектов. Если вызывать её через $this (что тоже работает ессно) теряется читабельность кода.

Короче говоря правило:
Статические функции вызываем: ИМЯ_КЛАССА_ГДЕ_БЫЛА_РЕАЛИЗОВАНА_ФУНКЦИЯ::funcname()
Остальные $this->funcname();


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
skyboy
Дата 6.10.2006, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

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



чтоб объявить метод/переменную класса, надо описывать его/её с ключевым словом static:
Код

class my
{
 public static $zzz= 'static variable';  
 public static function myfunc()
 {
   return 'static method #1';
 }
 public static function myfunc2()
 {
  return $thi->zzz;
 } 
}

echo my::myfunc();
echo my::myfunc2();


Добавлено @ 11:46 
пояснение на php.ru

Добавлено @ 11:47 
если метод объявлен статическим, то в его теле $this будет указывать на класс, а если не объявлен(как у тебя), то $this будет указывать на объект. А объект у тебя не инициализирован, потому php вполне справедливо ругается.
PM MAIL   Вверх
dipsy
Дата 6.10.2006, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 13.1.2005
Где: Нижний Новгород

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



Цитата(skyboy @  6.10.2006,  11:44 Найти цитируемый пост)
надо описывать его/её с ключевым словом static:

у меня php4, он ни static, ни public не знает.
PM MAIL WWW   Вверх
<Spawn>
Дата 11.10.2006, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 1
Всего: 64



Цитата

Статические функции вызываем: ИМЯ_КЛАССА_ГДЕ_БЫЛА_РЕАЛИЗОВАНА_ФУНКЦИЯ::funcname()


Для статических методов в области видимости класса можно использовать спец. ссылку на класс -  self (Не знаю, работает ли она в PHP 4), т.е. self::funcname();


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Extensions | Следующая тема »


 




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


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

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