Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Один вопрос по поводу ООП


Автор: mark2011 10.3.2013, 13:33
Всем добрый день!

Я сразу к сути.

Есть следующий код:
Код

class Base
{
            protected function baseFunction()
           {
                 //что-то делает
           }
}

class BaseExtendFirst extends Base
{
          protected function baseFirstFunction()
          {
                //тоже что-то делает
           }
}


Тут вроде понятно, что код типа:
Код

$a = new BaseExtendFirst();
$a->baseFunction();

должен сработать.

А теперь представьте, что есть набор классов. Возьмём жизненный пример:
Код

class Object
{
public function version_php()
{
        return PHP_VERSION
}
}

class Database extends Object
{
public function hasMySQL()
{
         return function_exists('mysql_connect');
}

public function test()
{

}
}

class MySQL extends Database
{
  public function connect()
  {

   }
}


И есть инициализированный класс MySQL. Вопрос: как из инициализированного класса MySQL обратиться к методу класса Object version_php() ?

Автор: Чучмек 10.3.2013, 17:24
Код

$this->version_php()

не ?

Автор: Fortop 10.3.2013, 17:26
Цитата(mark2011 @  10.3.2013,  13:33 Найти цитируемый пост)
Вопрос: как из инициализированного класса MySQL обратиться к методу класса Object version_php() ? 

Очевидно же - создать объект класса Object и вызывать у него нужный метод.

Добавлено через 52 секунды
Цитата(Чучмек @  10.3.2013,  17:24 Найти цитируемый пост)
не ? 

кстати вариант. Не посмотрел что там все унаследовано друг от друга

Автор: baldina 14.3.2013, 18:41
mark2011,
php.net:
Цитата

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

из определения понятно, что это транзитивно

Значит, в интерфейс MySQL входят функции, определенные в нем, в Database и в Object.

кстати
Цитата(mark2011 @  10.3.2013,  13:33 Найти цитируемый пост)
$a->baseFunction();

не сработает потому что метод недоступен (protected)
http://liveworkspace.org/code/dudCm$1

Добавлено через 4 минуты и 55 секунд
http://liveworkspace.org/code/62lPN$0

Автор: Aliance 15.3.2013, 10:05
А нормально разве называть класс class Object, это не служебное слово?

Автор: baldina 15.3.2013, 16:31
Цитата(Aliance @  15.3.2013,  10:05 Найти цитируемый пост)
class Object, это не служебное слово

нормально, не служебное. http://www.php.net/manual/ru/reserved.keywords.php

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)