Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Obiekty drugie podejście
CyberBob
post 12.02.2005, 00:04:07
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: --

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
mike
post 12.02.2005, 00:33:30
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
DeyV
post 12.02.2005, 08:45:28
Post #3





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




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. ?>


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
bela
post 12.02.2005, 10:46:59
Post #4


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

Ostrzeżenie: (0%)
-----


  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 ?


--------------------
Go to the top of the page
+Quote Post
CyberBob
post 12.02.2005, 12:05:53
Post #5





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: --

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
bela
post 12.02.2005, 12:24:14
Post #6


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

Ostrzeżenie: (0%)
-----


Przecież Ci wyżej podałem inne dry.gif
Poza tym ładujesz wszystko do zmiennej czyli jest ona nadpisywana. To chyba powinna być tablica


--------------------
Go to the top of the page
+Quote Post
CyberBob
post 12.02.2005, 12:34:06
Post #7





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: --

Ostrzeżenie: (0%)
-----


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 )...

Ten post edytował CyberBob 12.02.2005, 12:40:39
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 09:51