Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: ООП php, не определяется объект в функции  (Прочитано 556 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Grigory Smirnov

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1339
  • Дайте мне исходники, и я переверну Землю.
    • Просмотр профиля
    • Дафтер
К сожалению, я совсем забыл php. Столкнулся со странной проблемой.

Определяю класс, методы в нем. Сделал экземпляр класса. Когда вызываю метод в php скрипте, все нормально. Но когда его же вызываю в функции, получаю ошибку Call to a member function error() on a non-object in... Прошу помочь разобраться:
- возможные решения проблемы
- объяснение
- стоит ли переписывать все на ООП?

Заранее спасибо.

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: ООП php, не определяется объект в функции
« Ответ #1 : 12 Февраль 2014, 19:35:40 »
Похоже, внутри функции не виден объект, созданный вне области видимости, а создаётся новая переменная. В таком случае, когда объект создан вне функции, нужно использовать global.

Оффлайн Grigory Smirnov

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1339
  • Дайте мне исходники, и я переверну Землю.
    • Просмотр профиля
    • Дафтер
Re: ООП php, не определяется объект в функции
« Ответ #2 : 12 Февраль 2014, 19:40:56 »
unimix, спасибо, правда, не очень помогло. Работает, но все равно приходится еще одну строчку добавлять. До этого я в функции заново делал экземпляр.


Цитировать
стоит ли переписывать все на ООП?

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: ООП php, не определяется объект в функции
« Ответ #3 : 12 Февраль 2014, 20:12:56 »
А это зависит от проекта. Если будет проще работать с ООП кодом, то да, стоит, а если нет, то не стоит.

Объекты нужны для инкапсуляции, полиморфизма и наследования. Сам по себе объект - это набор переменных с методами, использующие их или их обрабатывающие. Каждый объект хранит свои значения переменных. Сами методы можно вызывать и вне объекта, но надо понимать, что внутри метода может быть (или появиться в будущем) работа с использованием переменных объекта.

Если нужно иметь доступ к функции класса, которая не использует переменные объекта, то такую функцию можно сделать статической (используя static):
Код: (php) [Выделить]
public static function_name() {}
Помимо классов есть ещё пространства имён.
« Последнее редактирование: 12 Февраль 2014, 20:27:05 от unimix »

Оффлайн Grigory Smirnov

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1339
  • Дайте мне исходники, и я переверну Землю.
    • Просмотр профиля
    • Дафтер
Re: ООП php, не определяется объект в функции
« Ответ #4 : 13 Февраль 2014, 13:45:32 »
unimix, спасибо за ответ, хотя и весьма пространный.

 

Страница сгенерирована за 0.078 секунд. Запросов: 24.