Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Funkcja __set
Forum PHP.pl > Forum > Przedszkole
Xart
Witam czytając jeden z poradników na temat OOP bo tego sie teraz uczę tongue.gif napotkałem się na kod i zrobiłem podobny i wszystko niby działa bo zwraca to co ma zwracać ale do tego wywala jakiś błąd (u autora tego nie było)

KOD:

  1. <?php
  2. class Test {
  3. public $liczba;
  4. function __set($nazwa, $wartosc){
  5. if (($nazwa == 'liczba') && ($wartosc < 450)){
  6. $this->$liczba = $wartosc;
  7. }else{
  8. echo 'Bad';
  9. }
  10. }
  11. }
  12. $o = new Test;
  13. $o->$liczba = 500;
  14. echo $o->liczba;
  15. ?>


Zwraca:

Notice: Undefined variable: liczba in C:\xampp\htdocs\index.php on line 13
Bad

Czyli skrypt się wykonuje ale czepia się chyba tego że jest $o->$liczba a nie $o->liczba ale wtedy gdy usunę $ nie przejdzie przez set...

Gdzie tkwi więc błąd ?
Turson
$o->liczba = 500;
jest git
Crozin
Nie przejdzie przez __set() ponieważ ta metoda jest wywoływana wtedy, gdy nie da się dostać bezpośrednio do danej właściwości, czyli w Twoim przypadku:
  1. $o->liczba = 123; // bezpośrednie odwołanie się do właściwości
  2. $o->abc = 123; // wywołanie __set() - właściwość "abc" nie istnieje
PS. Za takie wykorzystanie __set() skreśliłbym w ogóle tego autora.
Xart
@UP

To poradnik z tego filmiku

http://www.youtube.com/watch?v=ZXrNeRcI9Xc

ogólnie to inne tutki są spoko ale w tym np do porównania używa = zamiast == biggrin.gif Może miał zły dzień czy coś

@ Topic

Jak mogę więc inaczej przefiltrować tę zmienną ?
Crozin
Powinieneś utworzyć dedykowane metody do nadawania i zwracania wartości tej właściwości:
  1. class Test {
  2. private $liczba; // dzięki private nikt z zewnątrz nie będzie miał dostępu do tej właściwości
  3.  
  4. public function getLiczba() {
  5. return $this->liczba;
  6. }
  7.  
  8. public function setLiczba($liczba) {
  9. if ($liczba > 450) {
  10. throw new InvalidArgumentException(sprintf('Podana liczba jest zbyt duża. Podano %d, a limit to 450.', $liczba));
  11. }
  12.  
  13. $this->liczba = $liczba;
  14. }
  15. }
  16.  
  17. $o = new Test();
  18. $o->setLiczba(200);
  19. $o->getLiczba(); // zwraca 200
  20.  
  21. $o->setLiczba(500); // rzuca wyjatek
Xart
Jeszcze takie pytanko smile.gif
Macie może jakiś dobry link do kursu PDF/YT ?
No i co oznacza to return ? Bo ten gościu na YT tego return nie używał wcale..
Turson
Kursu PDF? Co to znaczy. #edit - aa kurs OOP w PDF, myślałem o kursie nauki PDF tongue.gif

Return - metoda coś zwraca. W jakimś kursie OOP znajdziesz szczegółowy opis
Crozin
Sugerowałbym zacząć od źródła: http://www.php.net/manual/en/ - manual jest zwięzły i napisany prostym językiem. Jest nawet częściowo spolszczony. A jeżeli nie wiesz co oznacza return, śmiem twierdzić, że nie masz opanowanego zagadnienia funkcji w PHP. Zanim weźmiesz się za OOP powinieneś przynajmniej przyswoić podstawy języka.
Xart
Podstawy języka znam biggrin.gif jak ja pisałem już strony PHP + MYSQL + Panel Admina z newsami, podstronami, galeriami ITP biggrin.gif
Ale pisałem to bez funkcji i oparte na mysql_
No i wiesz czas się przerzucić bo nawet funkcji nie używałem tylko zapisywanie odczytywanie if, switch i tyle...
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.