За последние 24 часа нас посетили 29774 программиста и 1755 роботов. Сейчас ищут 899 программистов ...

Глобальный объект

Тема в разделе "PHP для новичков", создана пользователем al.k, 5 мар 2010.

  1. al.k

    al.k Активный пользователь

    С нами с:
    4 мар 2010
    Сообщения:
    70
    Симпатии:
    0
    Адрес:
    UKR, Lugansk
    Собственно, вопрос в теме.Нужно создать объект в index.php, так что бы его методы были видны в любом участке кода.
    Может вопрос тривиален, но мне не поддается.

    PHP:
    1.  
    2.  
    3. <?php
    4.  
    5. class Foo
    6. {
    7.   public function __construct()
    8.   {}
    9.  
    10.   public function GetName()
    11.   {
    12.     return __METHOD__;
    13.   }
    14. }
    15.  
    16. class Bar
    17. {
    18.   function __construct()
    19.   {}
    20.  
    21.   public function _Print()
    22.   {
    23.     $foo->GetName();
    24.   }
    25. }
    26.  
    27. $foo = new Foo();
    28.  
    29. $bar = new Bar();
    30. $bar->_Print();
    31. ?>
    32.  
    Такой код не работает...Передача объект в качестве параметра знаю, не устраивает.
     
  2. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    статические методы?
     
  3. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    локатор
     
  4. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Говнокод, но сойдет.
    Принцип работы с глобальными переменными в РНР.

    PHP:
    1. <?php
    2.  
    3. class First
    4. {
    5.     protected $name;
    6.    
    7.    
    8.     public function SetName($name) {
    9.         $this->name = $name;
    10.     }
    11.    
    12.     public function GetName() {
    13.         return $this->name;
    14.     }
    15. };
    16.  
    17. class Second
    18. {
    19.     protected $ob;
    20.    
    21.     public function __construct($obname) {
    22.         $this->ob = $GLOBALS[$obname];
    23.     }
    24.    
    25.     public function Display() {
    26.         echo $this->ob->GetName();
    27.     }
    28. };
    29.  
    30. // работаем с первый классом
    31. $first = new First;
    32.  
    33. $first->SetName("Apple");
    34.  
    35. // Работает со вторым классом
    36. $second = new Second("first");
    37.  
    38. $second->Display();
    39.  
    40.  
    41. ?>
     
  5. al.k

    al.k Активный пользователь

    С нами с:
    4 мар 2010
    Сообщения:
    70
    Симпатии:
    0
    Адрес:
    UKR, Lugansk
    А что это? Просветите...
     
  6. al.k

    al.k Активный пользователь

    С нами с:
    4 мар 2010
    Сообщения:
    70
    Симпатии:
    0
    Адрес:
    UKR, Lugansk
    да.. упустил из вида.
     
  7. al.k

    al.k Активный пользователь

    С нами с:
    4 мар 2010
    Сообщения:
    70
    Симпатии:
    0
    Адрес:
    UKR, Lugansk
    А почему это говнокод? Что в нем не так?Я допустим хочу использовать(или лучше не стоит?) ваш пример, что надо сделать что бы его "причесать".
     
  8. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Может вам подойдет singleton?

    PHP:
    1. <?php
    2. class Foo
    3. {
    4.     static private $self;
    5.    
    6.     public function _printf(){
    7.         echo "ssss";
    8.     }
    9.    
    10.     /**
    11.      * @return Foo
    12.      */
    13.     static function instance(){
    14.         if (!self::$self){
    15.             self::$self = new self();
    16.         }
    17.         return self::$self; // Спасибо Luge за баг-репорт
    18.     }
    19. }
    20.  
    21. // В любом другом месте
    22. Foo::instance()->_printf();
    23.  
    24. // Или
    25. $bar = Foo::instance();
    26. $bar->_printf();
    27.  
    28.  
     
  9. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    topas
    return self::$self; забыл
     
  10. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Luge
    А зачем? ;)))
     
  11. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    PHP:
    1. <?
    2. class Locator {
    3.    protected static $classes=array();
    4.    static function getClass($name){
    5.            $md=md5(strtolower($name));
    6.            if(empty(self::$classes[$md])){
    7.               if(class_exists($name)){
    8.                  self::$classes[$md]=new $name();
    9.               }else print "Error: class '{$name}' does't exists";
    10.            }
    11.            return self::$classes[$md];
    12.    }
    13. }
    14. ?>
     
  12. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Apple
    тебе бы в битриксе писать
     
  13. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Mr.M.I.T.
    Выебнулся со своим кодом и на других погнал?
    Nice =)
     
  14. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Apple
    а чё тут гнать, ты посмотри. там такие же весёлые штуки =)
     
  15. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    Apple
    надо было не обижаться, а спросить у Mr.M.I.T.'а как он собирается вызывать свой класс ;)

    и чем singleton или выросший из него Service Locator лучше, в случае, если надо
    зы. везде есть статические методы :D
     
  16. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Luge
    а телепат фьюче моде?
     
  17. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
  18. al.k

    al.k Активный пользователь

    С нами с:
    4 мар 2010
    Сообщения:
    70
    Симпатии:
    0
    Адрес:
    UKR, Lugansk
    Всем спасибо за помощь, ответ получил исчерпывающий.