Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 16 из 16

Тема: Php5 разыменования объектов, которые возвращаются функциями.

  1. #11
    Продвинутый
    Регистрация
    17.11.2006
    Сообщений
    6,976
    Записей в дневнике
    15
    Изображения
    533
    Я бы советовал читать документацию на английском, там не так уж и сложно, зато вы всегда будете получать точную информацию, а не далекое представление об этой информации, которым является перевод.

  2. #12
    Пользователь
    Регистрация
    16.02.2011
    Сообщений
    51
    Здравствуйте,объясните пожалуйста,читаю PHP. Объекты, шаблоны и методики программирования | Мэтт Зандстра , шаблоны.
    разбираю вот этот пример в шаблонах
    PHP код:
    <?php
    abstract class Lesson
    {
        private 
    $duration;
        
    privare $costStrategy//5 сторока
        
    function __construct($duration,CostStrategy $strategy)
        {
            
    $this->duration =$duration;
            
    $this->costStrategy =$strategy;
        }
        function 
    chargaType()
        {
            return 
    $this->costStrategy->chargeType();
        }
        function 
    getDuration()
        {
            return 
    $this->duration;
        }
    }
    abstract class 
    CostStrategy
    {
        abstract function 
    cost(Lesson $lesson);
        abstract function 
    chargeType();
    }
    class 
    TimeCostStrategy extends CostStrategy
    {
        function 
    cost(Lesson $lesson)
        {
            return(
    $lesson->getDuration()*5); 
        }
        function 
    chargeType()
        {
            return 
    "Почасовая оплата";
        }
    }
    class 
    FixetCostStrategy extends CostStrategy
    {
        function 
    cost(Lesson $lesson)
        {
            return 
    30;
        }
        function 
    chargeType()
        {
            return 
    "Фиксированная ставка";
        }
    }
    $lessons[] = new Seminar(4,new TimeCostStrategy());
    $lessons[] = new Lecture(4,new FixetCostStrategy());
    foreach(
    $lessons as $lesson)
    {
        print
    "оплата за занятие{$lesson->cost()}.";
        print
    "тип оплаты: {$lesson->chargeType()}\n";
    }
    ?>
    появляется ошибка Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION in DApache2\localhost\www\Codelobster1.php on line 5
    и мне не понятно вот эти строчки
    $lessons[] = new Seminar(4,new TimeCostStrategy());
    $lessons[] = new Lecture(4,new FixetCostStrategy());
    на сколько я понимаю здесь создают экземпляры классов, но я не могу понять где из реализация.
    Объясните пожалуйсто.

  3. #13
    Пользователь
    Регистрация
    07.06.2007
    Сообщений
    35
    Доброй ночи.

    Ну в 5-й строке ошибка в написании privare - правильно private.
    А последний вопрос вообще не понял! Переформулируйте пожалуйста. (Реализация классов вверху вашего кода)

  4. #14
    Пользователь
    Регистрация
    16.02.2011
    Сообщений
    51
    ой с private как то не хорошо получилось, недоглядел, извиняюсь))
    меня интересует вот эти строчки
    $lessons[] = new Seminar(4,new TimeCostStrategy());
    $lessons[] = new Lecture(4,new FixetCostStrategy());
    я так понимаю, создаётся массив из объектов, но не понимаю что значит "new TimeCostStrategy()", это создание ещё одного обьекта в объекте?

  5. #15
    Пользователь
    Регистрация
    07.06.2007
    Сообщений
    35
    Имеется абстрактный класс Lesson, который описывает интерфейс объекта "занятия", есть его более детализированные реализации Seminar и Lecture. Думаю это объяснять не надо!?

    Абстрактный класс CostStrategy в данном случае описывает интерфейс стратегии формирования цены на занятие. т.е. цена каждого занятия высчитывается непосредственно в классах наследниках класса CostStrategy, а не в классе Lesson. Данный ход позволяет отказаться от тесной связи между классами занятиями и различными типами оплаты.

    Непосредственно по существу вопроса:

    $lessons[] = new Seminar(4,new TimeCostStrategy());
    $lessons[] = new Lecture(4,new FixetCostStrategy());
    я так понимаю, создаётся массив из объектов, но не понимаю что значит "new TimeCostStrategy()", это создание ещё одного обьекта в объекте?
    несколько корректив:
    1. Всегда, при возможности необходимо инициализировать переменные, перед их использованием, т.е. создание массива лучше обозначить строкой:
    PHP код:
    $lessons = array(); 
    2. Конструкция new создает экземпляр указанного далее класса. т.е. строчка ниже создает объект класса Seminar и передает при создании в его конструктор два параметра :
    - число 4;
    - только что созданный объект класса TimeCostStrategy;
    PHP код:
    new Seminar(4,new TimeCostStrategy()); 

  6. #16
    Пользователь
    Регистрация
    16.02.2011
    Сообщений
    51
    Спасибо за ответ!
    Ещё вопрос, а Seminar может теперь вызывать методы классаTimeCostStrategy?


Похожие темы

  1. Моржи - иногда они возвращаются....
    от GovNuke в разделе Просто общение
    Ответов: 38
    Последнее сообщение: 31.08.2008, 18:49
  2. Danger!!!!!! флудилко бандерлоги возвращаются!
    от Scr в разделе Просто общение
    Ответов: 84
    Последнее сообщение: 04.05.2008, 08:54
  3. -= «Мушкетеры» возвращаются на экраны! =-
    от Magnattt в разделе Просто общение
    Ответов: 4
    Последнее сообщение: 14.04.2008, 12:24
  4. Маски, которые мы носим....
    от Prosto K в разделе Просто общение
    Ответов: 62
    Последнее сообщение: 16.01.2008, 20:48

Рекомендуем

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  

SEO by vBSEO

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94