Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wywolywanie metod wrapper-ow
Forum PHP.pl > Forum > PHP > Object-oriented programming
marcio
Witam przepisuje sobie db manager i ogolnie wrapper-y poszczegolnych baz i mam maly problem.
Mam klase Vf_Db ktora wybiera i tworzy obiekt adaptera na ktorym pozniej mozna wykonywac zapytania, problem polega na tym ze musialbym opisac wszystkie metody adapterow w glownej klasie czyli:
  1. class Vf_Db
  2. {
  3. publib function Select($arg1, $arg2)
  4. {
  5. $this -> adapter -> Select($arg1, $arg2);
  6. }
  7. }

I nie chce mi sie teraz pisac tak ponad 20 metod, i potem dodawac nowe lub modyfikowac ich sygnatury gdy cos zmienie, jednak __call nie chce dzialac...
[php]
<?php

/**
*Volta framework

*@author marcio <opi14@op.pl>, <polishvodka7@gmail.com>
*@copyright Copyright © 2012, marcio
*@version 1.0
*/


class%2
Crozin
1. Dlaczego nie utworzysz wspólnego interfejsu dla adapterów i nie będziesz operować bezpośrednio na nich?
2. Zobacz sobie co masz pod self::$instance[$this -> db].
3. Konstruktor nie może zwracać żadnej wartości, podstawy języka.
marcio
Dlaczego nie utworzysz wspólnego interfejsu dla adapterów i nie będziesz operować bezpośrednio na nich?
  1. class Vf_Mysql_Query_Adapter extends Vf_Database implements ITransactions { }

Kazda klasa ma takie same API

Cytat
Konstruktor nie może zwracać żadnej wartości, podstawy języka.

Haha taki moj nawyk, bezsens ogolnie ;]

Cytat
self::$instance[$this -> db]

No i wlasnie tu jest problem, gdy wywolam klase na "czysto"
Cytat
$db = new Vf_MySql_Query_Adapter();
$db -> connect();

To wszystko dziala

LOL mozna zawsze miec takie glupie problemy i nie wiedziec czemu nie dziala, ironia losu sleep.gif'

NVM
  1. public function Select($rows, $table, $callbackFunc = '', $callbackAs = true)
  2. {
  3. return $this -> adapter -> Select($rows, $table, $callbackFunc, $callbackAs);
  4. }

I wszystko nagle dziala kazda inna metoda dziala nie wiem dlaczego ale bez deklaracji choc jednej metody(jakiejkolwiek) nie chce dzialac.
Crozin
No to pokaż ten niedziałający kod (byleby to nie było pięć stron tekstu).
marcio
  1. <?php
  2.  
  3. /**
  4. *Volta framework
  5.  
  6. *@author marcio <opi14@op.pl>, <polishvodka7@gmail.com>
  7. *@copyright Copyright (c) 2012, marcio
  8. *@version 1.0
  9. */
  10.  
  11.  
  12. class Vf_Dbs
  13. {
  14. protected static $instance;
  15.  
  16. protected $db;
  17.  
  18. protected $adapter;
  19.  
  20.  
  21. public static function Factory($db)
  22. {
  23. if(!isset(self::$instance[$db]))
  24. {
  25. self::$instance[$db] = new self();
  26. }
  27. return self::$instance[$db];
  28. }
  29.  
  30.  
  31. public function __construct()
  32. {
  33. $cfg = new Vf_Config(DIR_CONFIG);
  34. if(file_exists(DIR_DRIVERS.'Db/'.$cfg -> DbType.'.php'))
  35. {
  36. $this -> db = $cfg -> DbType;
  37. require_once(DIR_DRIVERS.'Db/'.$cfg -> DbType.'.php');
  38. $className = 'Vf_'.$cfg -> DbType.'_Query_Adapter';
  39.  
  40. if(class_exists($className))
  41. {
  42. $this -> adapter = new $className();
  43.  
  44. if($this -> adapter instanceof Vf_Database)
  45. {
  46. $this -> adapter -> connect();
  47. }
  48. }
  49. }
  50. }
  51.  
  52.  
  53. public static function &getInstance($db)
  54. {
  55. if(!isset(self::$instance[$db]))
  56. {
  57. self::$instance[$db] = new self();
  58. }
  59. return self::$instance[$db];
  60. }
  61.  
  62.  
  63. public function Select($rows, $table, $callbackFunc = '', $callbackAs = true)
  64. {
  65. return $this -> adapter -> Select($rows, $table, $callbackFunc, $callbackAs);
  66. }
  67.  
  68.  
  69. public function __call($method, $args)
  70. {
  71. if (!method_exists(self::$instance[$this -> db], $method))
  72. {
  73. throw new Exception("Brak metody {$method} w adapterze {$this -> db}");
  74. }
  75. return call_user_func_array(array(self::$instance[$this -> db], $method), $args);
  76. }
  77. }
  78.  
  79. ?>

Bez metody Select nie dziala a z tak...
Crozin
1. http://sscce.org/
2. Po czym ponownie wrzuć (tym razem już odpowiednio) kod.
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.