ФорумПрограммированиеPHP для идиотов → ООП в PHP5

ООП в PHP5

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 7 ноября 2010 г. 8:28, спустя 3 минуты 50 секунд

    public function charge(SELF::бензиномобиль);

    Сапожник без сапог
  • Mars

    Сообщения: 304 Репутация: N Группа: Кто попало

    Spritz 7 ноября 2010 г. 8:31, спустя 3 минуты 8 секунд


    public function charge(SELF::бензиномобиль);




    а как правильно?
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 7 ноября 2010 г. 8:32, спустя 49 секунд

    Mars, возьми пример с HDD и отталкивайся от него
    не всё полезно, что в swap полезло
  • Mars

    Сообщения: 304 Репутация: N Группа: Кто попало

    Spritz 7 ноября 2010 г. 8:41, спустя 8 минут 35 секунд

    <?php
    class бензиномобиль implements заправка_бензином {}
    class электромобиль {}

    interface заправка_бензином {}

    class бензозаправка
    {
    public function charge(заправка_бензином $object)
    {
    echo 'заправился на отличненько<br>'; return true;
    }
    }

    function заправить_машину($car)
    {
    if (@бензозаправка::charge($car)) echo 'иди нахуй!<br>';
    }

    $машина = new бензиномобиль;
    $электромашина = new электромобиль;

    заправить_машину($машина);
    заправить_машину($электромашина);
  • Mars

    Сообщения: 304 Репутация: N Группа: Кто попало

    Spritz 7 ноября 2010 г. 8:57, спустя 16 минут 44 секунды

    вернее так

    <?php
    class бензиномобиль implements заправка_бензином {}
    class электромобиль {}

    interface заправка_бензином {}

    class бензозаправка
    {
    public function charge(заправка_бензином $object, $id)
    {
    echo "$id заправился на отличненько<br>"; return true;
    }
    }

    $машина = new бензиномобиль;
    $электромашина = new электромобиль;

    бензозаправка::charge($машина, 1);
    бензозаправка::charge($машина, 2);
    бензозаправка::charge($электромашина, 3);
    бензозаправка::charge($машина, 4);
    Спустя 209 сек.
    Почему свои псто нельзя редактировать? говно движок форума
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 7 ноября 2010 г. 8:59, спустя 1 минуту 55 секунд

    Почему свои псто нельзя редактировать? говно движок форума

    просто у тебя говноправа на форуме.
  • Mars

    Сообщения: 304 Репутация: N Группа: Кто попало

    Spritz 7 ноября 2010 г. 9:04, спустя 4 минуты 51 секунду

    А как правильно отловить ошибку?
    Catchable fatal error: Argument 1 passed to бензозаправка::charge() must implement interface заправка_бензином, instance of электромобиль given
  • Mars

    Сообщения: 304 Репутация: N Группа: Кто попало

    Spritz 7 ноября 2010 г. 9:11, спустя 7 минут 20 секунд

    туплю, сделал вот так

    <?php
    class бензиномобиль implements заправка_бензином {}
    class электромобиль {}

    interface заправка_бензином {}

    class бензозаправка
    {
    public function charge($object, $id)
    {
    echo ($object instanceof заправка_бензином) ? "$id заправился на отличненько<br>" : "$id fail<br>";
    }
    }

    $машина = new бензиномобиль;
    $электромашина = new электромобиль;

    бензозаправка::charge($машина, 1);
    бензозаправка::charge($машина, 2);
    бензозаправка::charge($электромашина, 3);
    бензозаправка::charge($машина, 4);
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 7 ноября 2010 г. 9:14, спустя 2 минуты 34 секунды


    А как правильно отловить ошибку?
    Catchable fatal error: Argument 1 passed to бензозаправка::charge() must implement interface заправка_бензином, instance of электромобиль given
    Так и должно быть, нельзя заправлять электромобиль на бензозаправке
    зы английский ты тоже также учишь как и пхп? =)
    Work, buy, consume, die
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 7 ноября 2010 г. 9:24, спустя 9 минут 33 секунды

    Mars,
    <?php
    interface заправка_бензином {}
    interface заправка_электричеством {}

    class бензиномобиль implements заправка_бензином {}
    class электромобиль implements заправка_электричеством {}


    class бензозаправка
    {
    public function charge(заправка_бензином $object)
    {
    echo "заправился на отличненько"
    }
    }

    $машина = new бензиномобиль;
    $электромашина = new электромобиль;

    бензозаправка::charge($машина);
    бензозаправка::charge($электромашина);
    не всё полезно, что в swap полезло
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 8 ноября 2010 г. 2:34, спустя 17 часов 10 минут 47 секунд


    Щас рыба прийдет, на определениях всех победит))


    а вот и нет. Я в этой ООПшной теории не силен. Ну, что такое полиморфизм я вам не расскажу.

    зы: профи, тут недавно на собеседовании у товарища был вопрос - чем класс от объекта отличается?
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 8 ноября 2010 г. 2:38, спустя 3 минуты 23 секунды

    чем?
    Спустя 17 сек.
    зы: я не профи
    Спустя 20 сек.
    зы: и вообще не хочу я быть программистом
    Спустя 28 сек.
    я хочу спать
    Спустя 16 сек.
    сплю
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 8 ноября 2010 г. 2:59, спустя 20 минут 54 секунды

    Полиморфизм, это свойство ООП, которое позволяет адресовать методы у объектов тип которых точно не известено, но известна информация об интерфейсе или абстрактном классе как типе предка объекта (это что касаем PHP):
    $polymorf = $this->getDb()
    $polymorf->select(); //известно что AbstractDB имеет абстрактный метод select() и все, а какого конкретно типа переменная $polymorf - MysqlDb или PgsqlDb не важно и не известно в этой точке, да и с полиморфизмом не требуется знать…


    Класс или тип - это описание сущьности, объект - это структура в памяти ;)
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 8 ноября 2010 г. 3:03, спустя 4 минуты 36 секунд

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

    ты это с подьебом спрашиваешь или ты действительно не знаешь разницы ?
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 8 ноября 2010 г. 3:06, спустя 2 минуты 54 секунды

    ну блин, так получилось, что я работаю не зная основополагающих принципов

Пожалуйста, авторизуйтесь, чтобы написать комментарий!