Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]odwołanie się do funkcji z innej klasy
qba10
post 4.07.2008, 17:24:43
Post #1





Grupa: Zarejestrowani
Postów: 264
Pomógł: 20
Dołączył: 19.08.2007
Skąd: Bryńsk k. Lidzbarka Welskiego (nie mylić z Warmińskim)

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


Czy mogę się odwołać do funkcji wykonaj() z klasy test w funkcji zadanie() w klasie test2 ?
  1. <?php
  2. class test
  3. {
  4.  
  5. public function wykonaj()
  6. {
  7. //tresc funkcji
  8.  
  9. }
  10.  
  11.  
  12. }
  13.  
  14.  
  15. class test2
  16. {
  17. public function zadanie ()
  18.  
  19. {
  20. //tresc funkcji
  21.  
  22. test::wykonaj() ;
  23. }
  24. }
  25. ?>


--------------------
Qbix Media Project - Prosty Multiplatformowy Odtwarzacz Muzyki
Go to the top of the page
+Quote Post
l0ud
post 4.07.2008, 17:44:34
Post #2





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

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


Jak przekażesz lub utworzysz w klasie test2 instancje klasy test, to czemu nie? Albo bez tworzenia obiektu - wtedy jednak metoda wykonaj() musi być statyczna.


--------------------
XMPP: l0ud@chrome.pl
Go to the top of the page
+Quote Post
Sedziwoj
post 4.07.2008, 17:57:15
Post #3





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


To co napisał l0ud
  1. <?php
  2. class Test {
  3.  
  4. public static function wykonaj(){
  5. //tresc funkcji
  6. }
  7.  
  8. }
  9.  
  10. class Test2 {
  11.  
  12. public function zadanie (){
  13. //tresc funkcji
  14. Test::wykonaj();
  15. }
  16.  
  17. }
  18. ?>

lub
  1. <?php
  2. class Test {
  3.  
  4. public function wykonaj(){
  5. //tresc funkcji
  6. }
  7.  
  8. }
  9.  
  10. class Test2 {
  11.  
  12. public function zadanie (){
  13. //tresc funkcji
  14. $Test = new Test();
  15. $Test->wykonaj();
  16. }
  17.  
  18. }
  19. ?>


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
qba10
post 4.07.2008, 21:00:14
Post #4





Grupa: Zarejestrowani
Postów: 264
Pomógł: 20
Dołączył: 19.08.2007
Skąd: Bryńsk k. Lidzbarka Welskiego (nie mylić z Warmińskim)

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


Mam oto taki skrypt:
  1. <?php
  2. class bazadanych
  3. {
  4.  
  5. public static $rodzaj;
  6.  
  7.  
  8.  
  9.  
  10.  
  11. public $log;
  12. public $log_string;
  13. public $log_rodzaj;
  14. public $log_error;
  15.  
  16. public function __construct($rodzaj, $host, $user, $password, $db)
  17.  {
  18. $this -> wybor_bazy_danych($rodzaj, $host, $user, $password, $db);
  19. $this -> rodzaj = $rodzaj ; 
  20. $this -> log($this -> log, $this -> log_string, $this -> log_rodzaj, $this -> log_error) ;
  21.  }
  22.  
  23. public function wybor_bazy_danych($rodzaj, $host, $user, $password, $db)
  24. {
  25.  
  26. if ($rodzaj == 'mysql') 
  27. {
  28. $connect = @mysql_connect($host, $user, $password );
  29. if (!$connect)
  30. {
  31. $this -> log = 'error';
  32. $this -> log_string = 'polaczenie z baza danych';
  33. $this -> log_rodzaj = 'funkcja $bazadanych ->wybor_bazy_danych()';
  34. $this -> log_error =  mysql_error();
  35. die ( include ('system/jadro/e-door/includes/error_bazadanych.php'));
  36. }
  37.  
  38. }
  39. elseif ($rodzaj == 'pg')
  40. {
  41. $connect = @pg_connect($host, $user, $password );
  42. if (!$connect)
  43. {
  44. $this -> log = 'error';
  45. $this -> log_string = 'polaczenie z baza danych';
  46. $this -> log_rodzaj = 'funkcja $bazadanych ->wybor_bazy_danych()';
  47. $this -> log_error =  pg_error();
  48. die ( include ('system/jadro/e-door/includes/error_bazadanych.php'));
  49. }
  50.  
  51. }
  52.  
  53.  
  54.  
  55.  
  56. if($connect and $rodzaj =='mysql' ) {
  57. $connect_db = @mysql_select_db($db) ;
  58. if (!$connect_db)
  59. {
  60.  $this -> log = 'error';
  61. $this -> log_string = 'wybor bazy danych';
  62. $this -> log_rodzaj = 'funkcja $bazadanych ->wybor_bazy_danych()';
  63. $this -> log_error =  mysql_error();
  64. die ( include ('system/jadro/e-door/includes/error_bazadanych_db.php'));
  65.  
  66.  
  67. }
  68. }
  69. elseif($connect and $rodzaj =='pg' ) 
  70. { 
  71. $connect_db = @pg_select_db($db) ;  
  72.  if (!$connect_db)
  73. {
  74.  $this -> log = 'error';
  75. $this -> log_string = 'wybor bazy danych';
  76. $this -> log_rodzaj = 'funkcja $bazadanych ->wybor_bazy_danych()';
  77. $this -> log_error =  mysql_error();
  78. die ( include ('system/jadro/e-door/includes/error_bazadanych_db.php'));
  79.  
  80.  
  81. }
  82. }
  83. if($connect_db) { return true; } else {return false; }
  84.  
  85.  
  86.  
  87. }
  88.  
  89.  
  90.  
  91.  
  92.  //wykonywanie polecen SQL 
  93. public static function wykonaj($polecenie)
  94. {
  95. #mysql
  96. if ('mysql' == $this -> rodzaj)
  97. {
  98. $zapytanie = mysql_query($polecenie) ;
  99. if ($zapytanie)
  100. {
  101. return $zapytanie;
  102. }
  103. else
  104. {
  105. $this -> log ='error';
  106. $this -> log_string = $polecenie ;
  107. $this -> log_rodzaj = 'funkcja $bazadanych -> wykonaj()';
  108. $this -> log_error =  mysql_error() ;
  109.  
  110.  
  111.  
  112. }
  113. }
  114. #postgresql
  115. if ('pg' == $this -> rodzaj)
  116. {
  117. $zapytanie = pg_query($polecenie) ;
  118. if ($zapytanie)
  119. {
  120. return $zapytanie;
  121. }
  122. else
  123. {
  124.  
  125. $this -> log = 'error';
  126. $this -> log_string = $polecenie ;
  127. $this -> log_rodzaj = 'funkcja $bazadanych -> wykonaj()';
  128. $this -> log_error =  pg_error() ;
  129.  
  130. die (pg_error());
  131. }
  132. }
  133.  
  134.  
  135. }
  136.  
  137.  
  138. //System logów
  139. public function log($log, $string, $rodzaj, $error)
  140. {
  141. if ('error' == $log)
  142. {
  143. $data = date('Y-m-d H:i:s');
  144. return 'Data: '.$data.', Rodzaj bazy danych: '.$this -> rodzaj.' Rodzaj błędu: '.$rodzaj.', Wykonywane działanie: '.$string.', Wartość błędu: '.$error ;
  145.  
  146. }
  147.  
  148. }
  149.  
  150.  
  151.  
  152. }
  153. ?>

Teraz po ustawieniu metody statycznej, wywala mi błąd, że w lini 96 ($this -> rodzaj) nie jest obiektem. Jak to poprawic?


--------------------
Qbix Media Project - Prosty Multiplatformowy Odtwarzacz Muzyki
Go to the top of the page
+Quote Post
Cysiaczek
post 4.07.2008, 21:34:47
Post #5





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Odwołujesz się w kontekście klasy (statycznie), więc $this nie wskazuje na żaden obiekt. Kolejny błąd - do składowej statycznej próbujesz dobrać się dynamicznie.

  1. <?php
  2. if('mysql'==self::$rodzaj){} //i teraz będzie dobrze
  3. ?>


Pozdrawiam


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
qba10
post 4.07.2008, 22:01:58
Post #6





Grupa: Zarejestrowani
Postów: 264
Pomógł: 20
Dołączył: 19.08.2007
Skąd: Bryńsk k. Lidzbarka Welskiego (nie mylić z Warmińskim)

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


Dzięki wam wszystkim już się udało.

Mała poprawka.
Dodatkowo w linijce 19 trzeba zmienić:
  1. <?php
  2. $this -> rodzaj = $rodzaj ;
  3. ?>

Na:
  1. <?php
  2. self::$rodzaj = $rodzaj ;
  3. ?>

Trochę się nad tym pogłowiłem, ale jak widać poradziłem sobie.
Jeszcze raz dzięki

Pozdrawiam
Qba10


--------------------
Qbix Media Project - Prosty Multiplatformowy Odtwarzacz Muzyki
Go to the top of the page
+Quote Post
piotrooo89
post 5.07.2008, 07:50:46
Post #7


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




a co do 1 postu qba10 nie można zrobić dziedziczenia? klasa test2 dziedziczy po klasie test?


--------------------
Go to the top of the page
+Quote Post
Sedziwoj
post 5.07.2008, 10:18:11
Post #8





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Cytat(piotrooo89 @ 5.07.2008, 08:50:46 ) *
a co do 1 postu qba10 nie można zrobić dziedziczenia? klasa test2 dziedziczy po klasie test?


Dopóki nie wiemy co to dokładnie za klasy, nie można podsuwać takich pomysłów. Dziedziczenia używa się w określonych przypadkach, a nie "bo teraz będzie wygodniej".


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
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: 26.04.2024 - 20:40