Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] zminenne w klasie
Forum PHP.pl > Forum > Przedszkole
gebp
Zaczynam oswajać się z klasami jednak nie wychodzi mi to za bardzo. Proszę o małe tłumaczenie.
klasa.php
  1. <?php
  2. ... // logowanie do bazy mysql
  3. class A
  4.  
  5. { var $w;
  6.  
  7.  function A ($nazwa)
  8. { $sql="SELECT id FROM user WHER naza='$nazwa' ";
  9.  $q=mysql_query($sql);
  10.  
  11. $this->w = $z['id']; //przypisanie zadeklarowanej zmiennej wartości
  12. }
  13.  
  14.  function pokaz_id()
  15. {echo $w;}
  16. }
  17. ?>


plik test.php
  1. <?php
  2. $nazwa="Adam";
  3. require ('klasa.php');
  4.  
  5. $p= new A($nazwa);
  6. $p->pokaz_id();
  7.  
  8. Echo ("Twoje ID to: ".$p);
  9. ?>


Dlaczego test.php daje w wyniku:
Twoje ID to:

Z tego co czytałem zmienne zadeklarowane w klasie mają zasięg globalny. W takim razie co źle robię questionmark.gif?
Wg. mnie test.php powinień dać np:
Twoje ID to: 5
Cysiaczek
Nie.
Napisz tak:
  1. <?php
  2. //zamiast $w
  3. print $this->w;
  4. ?>

Dlatego, że do zmiennych klasy odnosisz się przez kontekst obiektu. Wewnątrz klasy kontekst aktualnego obiektu zapewnia pseudo-zmienna $this. Na zewnątrz jest to w Twoim wypadku $p
Te zmienne nie mają charakteru globalnego tak jak zmienne globalne.

Tak swoja droga - od razu zacznij z poziomu php 5, bo php 4 to masakra pod tym względem.
Poczytaj forum, google i wikipedie, ale najlepiej dobrą książkę. : )
gebp
Cosik nie bardzo Cysiaczek. Dosen't work.

Po pierwsze ( z tego co czytałem) to odwołanie powinno być:
  1. <?php
  2. print $this->w;
  3. ?>


Tyle że ja chcę wykorzystać funkcję pokaz_id() do wstawiani komórek w tabeli. I tak docelowo funkcja pokaz_id winna być tak:
  1. <?php
  2. ...
  3.  function pokaz_id()
  4.  {$u= $this->w;
  5.  echo ("<td> Twoje ID to : </td><td> $u </td>");
  6.  }
  7. ?>


Tylko jak zauważyłem przekazywanie zmiennych wewnątrz klasy jest bardzo skomplikowane. To powyżej także nie działa.
Co do PHP5... najpierw niech będę miał dobre podstawy w PHP4. Poza tym już trochę stary jestem i nie za bardzo nauka mi idzie.
Cysiaczek
1. Co do zmiennej, to ręka sama poleciała, ale się poprawiłem

2.
  1. <?php
  2. //piszesz
  3. Echo ("Twoje ID to: ".$p);
  4. //a ja twierdze, że
  5. $p->pokaz_id(); //wystarczy, bo funkcja używa echo wewnątrz.
  6. ?>

$p w php 4 wypisze Ci coś takiego Object id#1 albo coś w tym stylu.

3. Kolejna sprawa, to kod.
  1. <?php
  2. $sql="SELECT id FROM user WHER naza='$nazwa' ";
  3. ?>

Przyjrzyj mu się uważnie. : )

4. Nic nie jest skomplikowane w tym wypadku. Poprawnie:

  1. <?php
  2. class A {
  3.  
  4. var $w;
  5.  
  6. function A ($nazwa) {
  7. $sql="SELECT id FROM user WHERE nazwa='$nazwa' ";
  8. $q=mysql_query($sql) or die("Bład".mysql_error());
  9. $z=mysql_fetch_array($q); // ale tylko jeden rekord tak? Ostatni.
  10.  
  11. $this->w = $z['id']; //przypisanie zadeklarowanej zmiennej wartości
  12. }
  13.  
  14. function pokaz_id() {
  15. if (!empty($this->w)){
  16. return $this->w;
  17. }
  18. else {
  19. return 'Błąd - $w jest pustym stringiem'; // lepiej wyjątek zgłosić, ale do tego jeszcze dojdziesz : )
  20. }
  21. }
  22.  
  23. }
  24. $nazwa='Adam';
  25. $obiekt=new A($nazwa);
  26. print $obiekt->pokaz_id();
  27.  
  28. ?>


Pozdrawiam.
gebp
Masz absolutną rację.

3. Ręka poleciała sam.

Dzięki za pomoc.

Jednak jak na razie jest to dla mnie skomplikowane ... może raczej mało logiczne.
Na tym przykładzie widze iż napisanie tego beż użycia klasy było by łatwiejsze i skuteczniejsze.

Co do PHP5. Serwer na którym znajduje się stronka nie ma PHP5 ale ja na to nie mam żadnego wpływu. Nie mój serwer.

Jeszcze raz dzięki.

A przypomniało mi się.
Czy mogę zrobić tak
  1. <?php
  2. class A
  3. { 
  4.  var $aa;
  5.  var $bb;
  6.  
  7. function A ($a,$b)
  8.  { this->aa = $a;
  9.  this->bb=$b;
  10. }
  11. function suma()
  12. { $f= this->aa;
  13.  $g= this->bb;
  14. return $z=$f+$g
  15.  }
  16.  
  17. }
  18.  
  19. $a=1;
  20. $b=2;
  21.  
  22. $obj= new A($a,$b)
  23. print $obj->suma();
  24. ?>


Czy to porawne questionmark.gif?
plisek
troche zmienione, teraz powinno działać. pozdrawiam
btw, pamietaj ze odwołanie poprzez this to tez odwołanie do zmiennej zatem wymagany jest $
  1. <?php
  2. class A { 
  3.  
  4. var $aa;
  5. var $bb;
  6.  
  7. function A ($a,$b) {
  8.  $this->aa = $a;
  9.  $this->bb=$b;
  10. }
  11.  
  12. function suma() { 
  13.  $f= $this->aa;
  14.  $g= $this->bb;
  15.  return $z=$f+$g;
  16. }
  17.  
  18. }
  19.  
  20. $a=1;
  21. $b=2;
  22.  
  23. $obj= new A($a,$b);
  24. echo $obj->suma();
  25. ?>
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.