Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> widocznosc obiektu wewnątrz klasy
Black-Berry
post
Post #1





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

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


Czy we wnątrz klasy mogę użyć zewnętrzny obiekt bez konieczności używania deklaracji public ?

  1. <?php
  2. class c_page_creator_main
  3. {
  4. function c_page_creator_main()
  5. {
  6. global $db; //wewnątrz chciałbym użyć ten obiekt bez ciągłego deklorowania go jako public
  7. $db->query( "SELECT * FROM tabela" );
  8.  
  9. }
  10. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Black-Berry
post
Post #2





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

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


Tak, jakoś tak wyszło, że zaczynałem w PHP4 i się go trzymam. Wiem, że wychodzi już z użycia i nie ma sensu tego ciągnąć, a co do pełnej obiektowości to trochę ona do mnie nie przemawia. Wiem, ze teraz moda na obiekty i wogóle ale kiedy to wszystko się zaczynało to klasa znaczyła grupę obiektów i nikt nie budował całej klasy dla tylko jednego obiektu. Moim zdaniem to trochę nadużycie ale pewnie nie idę z duchem czasu... ale nie o tym:

Przyszło mi do głowy jeszcze jedno rozwiązanie. Co o nim myślicie?

  1. <?php
  2. class c_my_sql_database_driver()
  3. {
  4. function query( $query )
  5. {
  6. //ciało funkci
  7. }
  8. }
  9.  
  10. $object_my_sql_database_driver = new c_my_sql_database_driver();
  11.  
  12. function db_query($query)
  13. {
  14. // ta funkcja będzie mogła w przyszłości przełaczać na inne drivery bazy za pomocą
     switch();
  15. // więc dodatkowo storzę pomost między driverem bazy a klasami.
  16. global $object_my_sql_database_driver;
  17. $object_my_sql_database_driver->query($query);
  18. }
  19.  
  20.  
  21. class c_page_creator()
  22. {
  23. function body_drop()
  24. {
  25.  db_query( 'select coś tam' );
  26. }
  27. }
  28. ?>


Ten post edytował Black-Berry 13.02.2008, 21:04:50
Go to the top of the page
+Quote Post
em1X
post
Post #3





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


1) Bez sensu.... i skończ z tym globalem w końcu (IMG:http://forum.php.pl/style_emoticons/default/sciana.gif)

2) Napisałem Ci jak poprawniej to powinno wyglądać:
http://forum.php.pl/index.php?showtopic=87...rt=#entry441695

Możesz sobie tylko zamienić metodę getDB() na np. query(), która będzie wykonywać zapytania SQL.

3) Poczytaj jak wyglądają klasy w PHP5. Stwarzają masę nowych możliwości. Ludzie jeżdzą samochodami, a Ty dalej razem z Flinstonami na kwadratowych kołach jedziesz (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)

4) przykład:
  1. <?php
  2. abstract class Object {
  3.  
  4. public function getDB()
  5. {
  6. return DB::getInstance();
  7. }
  8.  
  9. }
  10.  
  11. class DB {
  12.  
  13. /**
  14.  * Pola
  15.  */
  16. private static $instance = null;
  17.  
  18. /**
  19.  * Metody
  20.  */
  21. private function __construct() {
  22. $this->connect();
  23. }
  24.  
  25. public function __destruct()
  26. {
  27. $this->disconnect();
  28. }
  29.  
  30. public function getInstance()
  31. {
  32. $class = __CLASS__;
  33. return self::$instance == null ? self::$instance = new $class : self::$instance;
  34. }
  35.  
  36. public function connect()
  37. {
  38. // polacz sie z baza danych
  39. }
  40.  
  41. public function disconnect()
  42. {
  43. // rozlacz sie z baza danych
  44. }
  45.  
  46. public function query($qry)
  47. {
  48. return mysql_query($qry);
  49. }
  50.  
  51. }
  52.  
  53. class TwojaKlasa
  54. extends Object
  55. {
  56. public function display()
  57. {
  58. return $this->getDB()->query('select pole from tabela where pole_id = 1');
  59. }
  60. }
  61.  
  62. /**
  63.  * Przyklad
  64.  */
  65.  
  66. $object = new TwojaKlasa();
  67.  
  68. print $object->display();
  69. ?>


Ten post edytował em1X 14.02.2008, 12:23:06
Go to the top of the page
+Quote Post

Posty w temacie
- Black-Berry   widocznosc obiektu wewnątrz klasy   13.02.2008, 01:01:28
- - webdicepl   Może dziedziczenie?   13.02.2008, 01:08:35
- - Black-Berry   nie ma innego sposobu ?   13.02.2008, 01:22:21
- - webdicepl   [PHP] pobierz, plaintext <?php class c_page_cre...   13.02.2008, 01:24:03
- - Black-Berry   no tak ale wtedy za kazdym razem bede musiał tworz...   13.02.2008, 01:28:07
- - webdicepl   Możesz jeszcze przekazywać obiekt do metody.   13.02.2008, 01:43:03
- - LonelyKnight   Cytat(Black-Berry @ 13.02.2008, 01:0...   13.02.2008, 11:05:44
- - Black-Berry   @LonelyKnight MAsz u mnie piwo:)   13.02.2008, 11:26:21
- - webdicepl   Dodam że singleton jest porównywany z globalami ty...   13.02.2008, 12:02:27
- - em1X   po prostu napisz sobie jakiś obiekt podstawowy, kt...   13.02.2008, 12:12:54
- - Black-Berry   @webdicepl Tak sobie myślę... że skoro różnica ma ...   13.02.2008, 12:15:45
|- - em1X   Cytat(Black-Berry @ 13.02.2008, 12:1...   13.02.2008, 16:09:25
- - webdicepl   Tak jak Ci mówiłem, tu najlepszym rozwiązaniem będ...   13.02.2008, 12:26:27
- - Black-Berry   Rozumiem, W takim razie zrobię tak jak sugerujesz....   13.02.2008, 16:29:09
- - em1X   Zauważ, że jeżeli będziesz chciał wprowadzić jakie...   13.02.2008, 16:49:11
- - Black-Berry   Tak, jakoś tak wyszło, że zaczynałem w PHP4 i się ...   13.02.2008, 21:01:49
|- - em1X   1) Bez sensu.... i skończ z tym globalem w końcu ...   13.02.2008, 21:12:55
- - Black-Berry   Dobra przekonałes mnie. Postęp musi być Dzis w no...   14.02.2008, 01:06:52
- - Tubis   Lepiej by było jakby te db_host, db_user i passwor...   16.02.2008, 11:57:16
- - Cysiaczek   Może tak jednak nie globale i stałe, a jakiś obiek...   16.02.2008, 12:08:40
- - Black-Berry   Taki obiekt konfiguracyjny były również singletone...   16.02.2008, 12:18:52
- - Cysiaczek   To już od Ciebie zależy. Może być sigletonem, ale ...   16.02.2008, 12:36:45
- - Cotter   Ja w tym celu tworzę sobie obiekt globalny w tabli...   17.02.2008, 00:10:37
- - Black-Berry   no to teraz mi już namieszałeś totalnie Znacznie ...   17.02.2008, 12:30:36
|- - em1X   No pewnie, że namieszał. Jeżeli chcesz przechowyw...   17.02.2008, 12:48:57
- - Black-Berry   @em1X tego typu osłonka sprawdza się ...   17.02.2008, 15:16:46
|- - em1X   1) dużo lepiej niż było na początku Trzeba pisać...   17.02.2008, 16:44:50
- - Black-Berry   boje się że mi życia na naukę ...   17.02.2008, 17:00:23


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

 



RSS Aktualny czas: 14.10.2025 - 14:31