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

в чем баг?

  • Law1iet

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

    Spritz 7 июля 2011 г. 13:04


    interface Observer
    {
    function notify($obj);
    }

    class ExchangeRate
    {
    static private $instance = NULL;
    private $observers = array();
    private $exchange_rate;
    private function ExchangeRates()
    {
    }
    static public function getInstance()
    {
    if (self::$instance == NULL)
    {
    self::$instance = new ExchangeRate();
    }
    return self::$instance;
    }
    public function getExchangeRate()
    {
    return $this->$exchange_rate;
    }
    public function setExchangeRate($new_rate)
    {
    $this->$exchange_rate = $new_rate;
    $this->notifyObservers();
    }
    public function registerObserver($obj)
    {
    $this->observers[] = $obj;
    }
    function notifyObservers()
    {
    foreach($this->observers as $obj)
    {
    $obj->notify($this);
    }
    }
    }

    class ProductItem implements Observer
    {
    public function __construct()
    {
    ExchangeRate::getInstance()->registerObserver($this);
    }
    public function notify($obj)
    {
    if ($obj instanceof ExchangeRate)
    {
    // Update exchange rate data
    print "Received update!\n";
    }
    }
    }


    $product1 = new ProductItem();
    $product2 = new ProductItem();

    $q = new ExchangeRate();
    $q->setExchangeRate(4);

    ExchangeRate::getInstance()->setExchangeRate(4);


    пример из книжки. Должно выдавать 2 радостных сообщения "Received update!\n", а выдает

    Fatal error: Cannot access empty property in Z:\home\localhost\www\newproject\observerclass.php on line 29 :(

    собственно, ошибка в методе setExchangerate, но я не понимаю какая :)
    Спустя 224 сек.
    чет не вижу кнопку отредактировать :)

    строки

    $q = new ExchangeRate();
    $q->setExchangeRate(4);
    закоментите, это мои эксперименты))
  • phpdude

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

    Spritz 7 июля 2011 г. 13:07, спустя 3 минуты 19 секунд

    return $this->$exchange_rate;

    папке передай чтобы очки купил :-)

    перед букой Ёб лишний доллар
    Сапожник без сапог
  • Law1iet

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

    Spritz 7 июля 2011 г. 13:13, спустя 6 минут 12 секунд

    ололо, домо аригато))
  • kostyl

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

    Spritz 7 июля 2011 г. 13:17, спустя 3 минуты 40 секунд

    phpdude, надо при регистрации написать - "Редактировать посты надо заслужить блядь"
  • phpdude

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

    Spritz 7 июля 2011 г. 13:33, спустя 15 минут 46 секунд


    ололо, домо аригато))
    папке скажи чтобы денег лучше вернул))) ну и с оригато его конечно xDDD
    Сапожник без сапог
  • Animator

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

    Spritz 7 июля 2011 г. 15:04, спустя 1 час 31 минуту 51 секунду

    пример из книжки!? из таких книжек 7 лет назад нелохие "баяны" получались…
    либо я таки в окопе, либо кое кто пытается козла доить :)
  • kostyl

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

    Spritz 8 июля 2011 г. 0:32, спустя 9 часов 27 минут 52 секунды

    есть охуенные книжки но с кучей ошибок в коде… сразу скил повышаешь )))
  • Law1iet

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

    Spritz 8 июля 2011 г. 13:05, спустя 12 часов 32 минуты 16 секунд


    /*echo "<p>";
    ReflectionClass::export("reflectionclass");
    echo "</p>";
    */
    class ClassOne
    {
    function callClassOne() {
    print "In Class One\n";
    }
    }
    class ClassTwo {
    function callClassTwo() {
    print "In Class Two\n";
    }
    }
    class ClassOneDelegator {
    private $targets;
    function __construct() {
    $this->target[] = new ClassOne();
    }
    function addObject($obj) {
    $this->target[] = $obj;
    }
    function __call($name, $args) {
    foreach ($this->target as $obj) {
    $r = new ReflectionClass($obj);
    if ($method = $r->getMethod($name)) {
    if ($method->isPublic() && !$method->isAbstract()) {
    return $method->invoke($obj, $args);
    }
    }
    }
    }
    }
    $obj = new ClassOneDelegator();
    $obj->addObject(new ClassTwo());
    $obj->callClassOne();
    $obj->callClassTwo();

    тема делегирование и рефлексии

    выводит фатальную ошибку

    Fatal error: Uncaught exception 'ReflectionException' with message 'Method callClassTwo does not exist' in Z:\home\localhost\www\newproject\reflections.php:28 Stack trace: #0 Z:\home\localhost\www\newproject\reflections.php(28): ReflectionClass->getMethod('callClassTwo') #1 [internal function]: ClassOneDelegator->__call('callClassTwo', Array) #2 Z:\home\localhost\www\newproject\reflections.php(39): ClassOneDelegator->callClassTwo() #3 {main} thrown in Z:\home\localhost\www\newproject\reflections.php on line 28

    а надо 2 радостных сообщения. Лишних долларов вроде нету :(

    помогите плз.!!…
    Спустя 87 сек.
    и, да, как выводить в форматированном виде (ReflectionClass::export("reflectionclass"))? т.е исходный код адекватен, с переходами между строк, а браузер всё в одну пишет.
  • phpdude

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

    Spritz 8 июля 2011 г. 13:23, спустя 18 минут 57 секунд

    Law1iet, гразы мануал. http://ru2.php.net/manual/en/reflectionclass.hasmethod.php

    папке передавай привет, пусть объявится в скайп падонаг
    Спустя 52 сек.
    т.е исходный код адекватен, с переходами между строк, а браузер всё в одну пишет.

    ты прав, хтмл ты тоже по видеокурсам учил? :-)

    <pre> вот тут блядь будут все отступы и пробелы  фффф                 ввввввв           фы


    фыфф</pre>
    Сапожник без сапог
  • Law1iet

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

    Spritz 8 июля 2011 г. 14:10, спустя 46 минут 54 секунды

    какой папке о чем ты :D провал, да, хтмл по видео :D пхп вот по учебнику надо.

    уууу документация… бррр… гляньте, мб все таки найдете ошибку в исходнике примера @[email protected]
  • phpdude

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

    Spritz 8 июля 2011 г. 14:49, спустя 38 минут 46 секунд

    уууу документация… бррр… гляньте, мб все таки найдете ошибку в исходнике примера @[email protected]

    носом ткнуть? так я вроде ткнул уже …

    надо так короче

    $r = new ReflectionClass($obj);
    if ($r->hasMethod($name) && ($method = $r->getMethod($name))) {
    if ($method->isPublic() && !$method->isAbstract()) {
    return $method->invoke($obj, $args);
    }
    }
    Сапожник без сапог

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