Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
26 / 25 / 3
Регистрация: 27.09.2009
Сообщений: 134

Вызов функций наследуемых классов

27.05.2011, 23:55. Показов 2630. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте !
Есть код (приблизительно):
PHP
1
2
3
4
5
6
7
8
9
10
11
12
class Main {
}
 
class One extends Main {
  function func1(...) { ...... }
  function func2(...) { ...... }
}
 
class Two extends Main {
  function func3(...) { ...... }
  function func4(...) { ...... }
}
Вопрос: как при существующем обьекте класса Main получить доступ и к функциям класса One и к функциям класса Two ?
Всмысле есть $oMain = new Main();
Как получить доступ к $oMain->func1(...) и $oMain->func3(...)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.05.2011, 23:55
Ответы с готовыми решениями:

Список наследуемых классов
Здравствуйте. Скажите пожалуйста можно ли получить список всех классов, которые наследуются от определенного класса. class first{} ...

Вызов функций
В каком направлении копать или дайте пример как сделать примерно следующее: $sql = new MySqlClass; ...

Автозагрузка, пространство имен и вызов встроенных в php классов
Всем доброго времени суток. Есть следующий код для соединения с БД: namespace database; class DB { private static $instance =...

3
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
28.05.2011, 05:55
skynetxxx, Никак. Это противоречит принципам ООП. Main про One и Two вообще ничего не знает.
1
26 / 25 / 3
Регистрация: 27.09.2009
Сообщений: 134
04.06.2011, 18:46  [ТС]
Хм. Спасибо...
У меня тогда вопрос: как пишут, например, плагины ?
Чтобы не редактирую код основного класса добавить в него методы через другие классы.
Ну то-есть не редактирую код класса Main (ну или совсем немного) добавить в него методы func1,func2,func3,func4.
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
05.06.2011, 07:11
Цитата Сообщение от skynetxxx Посмотреть сообщение
У меня тогда вопрос: как пишут, например, плагины ?
Чтобы не редактирую код основного класса добавить в него методы через другие классы.
Абстрактные классы и интерфейсы. В моем понимании всё могло бы быть примерно так.

Описалово абстрактного плагина:
PHP
1
2
3
4
5
6
7
8
9
10
abstract class Plugin {
    protected $main;
    protected $config;
    public function __construct(Main $main, array $config) {
        $this->main = $main;
        $this->config = $config;
    }
    abstract public function foo();
    abstract public function bar($baz);
}
Тестовый плагин:
PHP
1
2
3
4
5
6
class TestPlugin extends Plugin {
    public function foo() {
    }
    public function bar($baz) {
    }
}
Использование где-то там:
PHP
1
2
3
4
5
//$PluginClass = 'TestPlugin';
//$PluginConfig = array();
$plugin = new $PluginClass($this, $PluginConfig);
$plugin->foo();
$plugin->bar(42);
С интерфейсами суть та же, но разница в общей философии. Класс может реализовавыть несколько интерфейсов, и мы по объекту класса всегда можем проверить, реализовывает ли данный класса тот или иной интерфейс:
PHP
1
2
3
4
5
6
7
8
interface Foo {
    public function a();
    public function b($c);
}
interface Bar {
    public function x();
    public function y($z);
}
PHP
1
2
3
4
5
6
7
8
9
10
11
12
class TestPlugin extends Plugin implements Foo, Bar {
    ...
    public function a() {
    }
    public function b($c) {
    }
    
    public function x() {
    }
    public function y($x) {
    }
}
PHP
1
2
3
4
if ($plugin instanceof Foo) {
    $plugin->a();
    $plugin->b(37);
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.06.2011, 07:11
Помогаю со студенческими работами здесь

Вызов функций
Добрый день! Изучаю php и возник вопрос: "Как корректно реализовать вызов функций"? Есть форма авторизации и регистрации. ...

вызов функций
нужно чтоб если в форме ввода мыла пусто, чтоб было "mail is not inputed", а у меня в таком случае вызывает этот блок "elseif...

Вызов одноименных функций классов наследников из родительского класса
Как вызвать функцию классов наследников из родительского класса. Нужно что бы было универсальное решение, если мы захотим создать еще...

Отображение данных из наследуемых классов
Всем здравствуйте. Вопрос такой. Библиотека. Если заходит читатель он может увидеть какие книги и газеты и сколько есть в наличии...

Вызов наследуемых методов из базового класса
Всем доброго времени суток, перейду сразу к сути. Код: class Base { protected: public: virtual void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru