Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak wykonać metodę na ...
Forum PHP.pl > Forum > PHP > Object-oriented programming
krk82
Witam
Mamy klasę:
  1. <?php
  2. class DB{
  3.  
  4.  function Execute( $query ) {
  5. return mysql_query( $query );
  6. }
  7.  
  8.  function FetchRow(){
  9. ma wyświetlać kolejne rekordy
  10. }
  11.  
  12. }
  13. ?>


Nastepnie robimy:
  1. <?php
  2. $result = $db->Execute("SELECT * FROM ".TABLE_LANG."");
  3. while($Aresult = $result->FetchRow()){
  4. }
  5. ?>


i dostaje:
Fatal error: Call to a member function FetchRow() on a non-object in ...

I pytanie jak to zrobić ? Tzn co powinna zwracać Execute aby można było na tym co zwróci wykonać metodę FetchRow() ?
Jarod
Cytat(krk82 @ 23.02.2007, 19:10:48 ) *
i dostaje:
Fatal error: Call to a member function FetchRow() on a non-object in ...

Nie utworzyłeś instancji klasy.
Cytat(krk82 @ 23.02.2007, 19:10:48 ) *
I pytanie jak to zrobić ? Tzn co powinna zwracać Execute aby można było na tym co zwróci wykonać metodę FetchRow() ?

Execute() powinna np zapisywać wynik zapytania do zmiennej prywatnej z której będzie korzystać FetchRow().

Poczytaj najpierw o podstawach..
TomASS
Kod
Nie utworzyłeś instancji klasy.

To podstawa!
Ale jeśli nie chcesz tworzyć instancji możesz użyć słowa kluczowego static smile.gif

  1. <?php
  2. class DB{
  3.  
  4.  public static function Execute( $query ) {
  5. return mysql_query( $query );
  6. }
  7.  
  8.  function FetchRow(){
  9. return 1;
  10. }
  11.  
  12. }
  13.  
  14. DB::Execute('dadasd');
  15. ?>


Dodatkowo wskazujesz:
  1. <?php
  2. $result->FetchRow()
  3. ?>

że $result jest obiektem, a w Twoim kodzie z niczego to nie wynika.
krk82
instancje > tak tak wiem,
czyli co execute powinno zwrócić obiekt ?
żeby można było na niej użyć metody fetchRow() ?
TomASS
Ale powiedz co chcesz stworzyć, na razie takie rozmowa nie ma sensu, ponieważ sam nie wiesz co chcesz uzyskać - to skąd my mamy wiedzieć? smile.gif

Prawdopodobnie chcesz stworzyć jakiś sterownik/kontroler do bazy danych. Jeśli tak, to przemyśl jakie funkcje członkowskie (popularnie zwane metodami) chciałbyś wykorzystywać.
Cytat
czyli co execute powinno zwrócić obiekt ?

To Ty powinieneś najlepiej wiedzieć co chcesz uzyskać tą funkcją.

Cytat
żeby można było na niej użyć metody fetchRow() ?

Kod
$result->FetchRow()

Z tego wygląda, jak już pisałem, że $result musi być obiektem. Jeśli $result to wynik funkcji Execute() to odpowiedź na pierwsze pytanie brzmi. Tak - Execute() powinno zwracać obiekt.
arecki
Cytat(krk82 @ 23.02.2007, 19:10:48 ) *
  1. <?php
  2. $result = $db->Execute("SELECT * FROM ".TABLE_LANG."");
  3. while($Aresult = $result->FetchRow()){
  4. }
  5. ?>


Bardziej działało by gdybyś napisał:
  1. <?php
  2. $result = $db->Execute("SELECT * FROM ".TABLE_LANG."");
  3. while($Aresult = $db->FetchRow()){
  4. }
  5. ?>


Oczywiście gdyby w samej instancji klasy były przechowywane dane z wykonanego zapytania.
sanchoo
  1. <?php
  2. class walidacja{
  3.  
  4.  
  5.  public function pustepole($sprawdzany, $pole)
  6.  {
  7.  if(strlen($sprawdzany))
  8.  $veryfication = array ("strlen".$pole => 1); //1 - jesli poprawnie
  9.  else $veryfication = array ("strlen".$pole => 0);
  10.  
  11.  }
  12.  
  13. }
  14.  
  15.  
  16. $sprawdzanie =new walidacja;
  17. $sprawdzenie -> pustepole($_POST['nick'], 'nick'); //TO JEST 21 LINE!!
  18.  
  19. echo $veryfication['strlennick'];
  20. ?>


Fatal error: Call to a member function pustepole() on a non-object in /home/sanchoo/public_html/test/walidacja.php on line 21


Bede wdzieczny...
dr_bonzo
Kod
PHP Notice:  Undefined variable: sprawdzenie in runme.php on line 17


Juz znalazles blad?
i wyslweitlaj WSZYSTKIE BLEDY,
error_reporting( E_ALL );
sanchoo
ok. wyjde pewnie na lame.. no ale mam dac var przed?? nie czaje za bardzo tego :/
arecki
hint: ()
sanchoo
sprawdzanie != sprawdzenie
:/
dr_bonzo
hehehe

$sprawdzAnie =new walidacja;
$sprawdzEnie -> pustepole($_POST['nick'], 'nick'); //TO JEST 21 LINE!!

juz jasne? smile.gif

uzyj edytora z podpowiadaniem skladni -- unikniesz przynajmniej czesci takich bledow.
sanchoo
dzieki! smile.gif
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.