Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Obiekty drugie podejście
Forum PHP.pl > Forum > PHP > Object-oriented programming
CyberBob
Mam mały problemik ze składnia:
  1. <?php
  2.  
  3. $modules_list = array( 'test', 'test2' );
  4.  
  5. foreach( $modules_list as $var )
  6. {
  7.     $this -> $var = $var::singleton( );
  8. }
  9.  
  10. ?>

Ma ktoś może pomysł jak obejść ten problem, bo oczywiście coś takiego jak $var::singleton( ); nie moze mieć miejsca...
mike
A skąd takiego dziwoląga wytrzasnąłeś!?

Co chcesz osiągnąć, czy to tylko kod z głowy służący napakowaniu wszystkich możliwych operatorów w jednym miejscu i bez konkretnego celu.

W samej linii 7 masz dwa błędy :
Nie tak :
  1. <?php
  2. // ...
  3. $this -> $var = $var::singleton( );
  4. // ...
  5. ?>

Tylko tak ( o ile var jest jakąś klasą a var ( przy $this -> var ) jakimś polem obiektu ) :
  1. <?php
  2. // ...
  3. $this->var = var::singleton( );
  4. // ...
  5. ?>


Ale tak jak mówię. Dla mnie to totalna bzdura jest.
DeyV
ja domyślam się że chodzo o to, by w zmiennej podać nazwę klasy, z której ma zostać uruchomiona metoda.

I choć można mieć wątpliwośći co do klarownośći OOP tego projektu, to rozwiązanie jest bardzo proste: call_user_func " title="Zobacz w manualu PHP" target="_manual
  1. <?php
  2. class myclass {
  3. function say_hello() 
  4. {
  5. echo &#092;"Hello!n\";
  6. }
  7. }
  8.  
  9. $classname = &#092;"myclass\";
  10.  
  11. call_user_func(array($classname, 'say_hello'));
  12. ?>
bela
  1. <?php
  2.  
  3. $modules_list = array( 'test', 'test2' );
  4.  
  5. foreach( $modules_list as $var )
  6. {
  7. $this -> $var[] = {$var}::singleton( );
  8. }
  9.  
  10. ?>


O coś takiego chodzi ?
CyberBob
Cytat(DeyV @ 2005-02-12 08:45:28)
ja domyślam się że chodzo o to, by w zmiennej podać nazwę klasy, z której ma zostać uruchomiona metoda.

Właśnie o to mi chodzi :] Teraz dzięki pomocy wyglada to tak:
  1. <?php
  2.  
  3. $modules_list = array( 'test', 'test2' );
  4.  
  5. foreach( $modules_list as $var )
  6. {
  7. $this -> $var = call_user_func( array( $var, 'singleton' ) );
  8. }
  9.  
  10. ?>

$modules_list jest tylko zrobiona tak na potrzeby testu, później lista modułów będzie ładowana z bazy danych, bo to moje udziwnienie chodzi mi właśnie o to żeby w pętelke pobrać sobie liste modułów, które mają zostać zainicjowane podczas startu jajka. Kazdy moduł jest uruchamiany na zasadzie singletonu stad właśnie miałem problem żeby uruchomić metode singleton ze zmieniającej nazwy klasy...Wiem, że troszeczke dziwnie to wygląda, macie może jakieś "ładniejsze" rozwiązania questionmark.gif Aaaaa i dzięki za pomoc smile.gif
bela
Przecież Ci wyżej podałem inne dry.gif
Poza tym ładujesz wszystko do zmiennej czyli jest ona nadpisywana. To chyba powinna być tablica
CyberBob
Cytat(bela_666 @ 2005-02-12 12:24:14)
Przecież Ci wyżej podałem inne dry.gif
Poza tym ładujesz wszystko do zmiennej czyli jest ona nadpisywana. To chyba powinna być tablica

To twoje mi nie działa...Sam próbowałem z {} i wywala mi, że ten znak w tym miejscu nie jest dozwolony...Wiesz nie nadpisuje zmiennej kazdy modul ma swoją zmienna ( uzywając singleton w modulach mam tylko referencje do juz utworzonego obiektu ) np.
  1. <?php
  2.  
  3. $this -> mod_test
  4. $this -> mod_test2
  5.  
  6. ?>

W poszczegolnych modulach moge sobie zrobic coś takiego:
  1. <?php
  2.  
  3. $this -> mod_test = mod_test::singleton( );
  4.  
  5. ?>

Tak BTW. przeszukujac forum znalazlem twój przykładzik jak ominąc potrzebe deklarowania w każdym module singletonu, jedna klasa pozniej wszystkie po niej dziedzicza:
  1. <?php
  2.  
  3. class idawell
  4. {
  5. private function __construct() {
  6. }
  7.  
  8. public static function GI( $name )
  9. {
  10. static $instance;
  11.  
  12. if ( $instance[$name] == null )
  13. {
  14. $instance[$name] = new $name;
  15. }
  16.  
  17. return $instance[$name];
  18. }
  19. }
  20.  
  21. ?>

Tylko zaczęly mi sie robic dziwne rzeczy, gdy raz odwołałem się do singletonu w jaderku było okej, ale pozniej gdy w modułach chciałem to uczynić, skrypt mi się wykonywał w nieskończoność, wiec zdecydowalem sie na definiowanie singletonu w kazdym module -> tak jak to zrobiles w twoim przykladowym silniku ( tez na forum gdzies linka znalazlem )...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.