Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] zmienne zmiennych w zastosowaniu do funkcji
Forum PHP.pl > Forum > Przedszkole
Jarod
Mam dwie funkcje:
  1. <?php
  2. function atest()
  3. {
  4. echo '<br/>aaaaaaaaaaaaaaatest<br/>';
  5. }
  6.  
  7. function btest()
  8. {
  9. echo '<br/>bbbbbbbbbbbbbbbbtest<br/>';
  10. }
  11. ?>


oraz zmienną:
  1. <?php
  2. $ktoraFunkcja = 'a';
  3. ?>


Chciałbym zrobić coś takiego, że jeśli $ktoraFunkcja = 'a' to wywoływana jest fukcja atest(), jeśli $ktoraFunkcja = 'b' to wywoływana jest fukcja btest() poprzez zapis w stylu:

  1. <?php
  2. $ktoraFunkcja.test();
  3. ?>


Tylko, że to nie zadziała. Nie wiem jak to zapisać..
siemakuba
  1. <?php
  2. $ktoraFunkcja .= 'test';
  3. $ktoraFunkcja();
  4. ?>

?

  1. <?php
  2. call_user_func($ktoraFunkcja.'test');
  3. ?>

?

pozdr.
Jarod
Cytat(siemakuba @ 26.02.2007, 01:14:36 ) *
  1. <?php
  2. call_user_func($ktoraFunkcja.'test');
  3. ?>

Drugi sposób lepszy. Ale nie da się tego zastosować przy moim problemie. Muszę opisać dokładniej.

Mam dwie klasy:
Cytat
MysqlException
PostgresqlException


Właściwość statyczna Config::$DbType przechowuje wartości: 'Mysql' lub 'Postgresql'
(Dzięki temu będę mógł zmieniać bazę danych z której korzystać będzie aplikacja bez wprowadzania zmian w kodzie).


Chciałbym uzyskać coś podobnego:
  1. <?php
  2. try
  3. {
  4. // jakaś operacja na bazie
  5. }
  6. catch (Config::$DbType.Exception $e)
  7. {
  8. }
  9. ?>
dr_bonzo
AbstractFactory

klasy MysqlException, i PGEx... niech dziedzicza z jednej wspolnej, DBExc

Konfigurujesz abstract factory, ktora ci zwraca Factory dostosowana do wybranej bazy danych, ktora to zwraca obiekty podklas takich jak
BDException i innych ktorych uzywasz.

I wtedy kod sie nic nie zmienia, i nie masz tych zmiennych zmniennych rozsianych po kodzie (+dziala podpowiadanie kodu).

Cos w tym stylu
  1. <?php
  2. try
  3. {
  4. $dbFactory = AbstractDBFactory( Config::$dbType );
  5. $post = new Post( $dbFactory->getConnection() );
  6. ....
  7.  
  8. ...
  9. $post->save();
  10. }
  11. catch ( DBException $e ) // i lapiesz wyjatek nadklasy, a nie szczegolny, jak PGException
  12. {...}
  13. ?>
Jarod
Mam główną klasę:

  1. <?php
  2. class CubeException extend Exception
  3. {
  4. //...
  5. //...
  6. }
  7.  
  8. class MysqlException extend CubeException
  9. {
  10. }
  11.  
  12. class PostgresqlException extend CubeException
  13. {
  14. }
  15. ?>


a utworzone połączenie z bazą trzymam w Registry. To prawie to samo co Ty podałeś a nie działa..

EDIT:

Cytat(dr_bonzo @ 26.02.2007, 09:41:39 ) *
(...)
klasy MysqlException, i PGEx... niech dziedzicza z jednej wspolnej, DBExc
(...)
// i lapiesz wyjatek nadklasy, a nie szczegolny, jak PGException


To po co w ogóle klasy MysqlException, i PGEx ?
dr_bonzo
Cytat
To po co w ogóle klasy MysqlException, i PGEx

Zeby ladnie wygladalo, bo i tak bedziesz lapal tylko ich nadklasy (DBExc.)


Cytat
To prawie to samo co Ty podałeś a nie działa..

Prawie robi....
pokaz choc troche kodu
Jarod
Cytat(dr_bonzo @ 28.02.2007, 01:24:35 ) *
Zeby ladnie wygladalo, bo i tak bedziesz lapal tylko ich nadklasy (DBExc.)

Może lepiej po prostu zrezygnować z klas MysqlException i PostgresqlException i zrobić jedną wspólną DatabaseException?
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.