Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Funkcja __set
Xart
post 20.04.2014, 12:05:10
Post #1





Grupa: Zarejestrowani
Postów: 267
Pomógł: 6
Dołączył: 8.04.2013

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


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 ?
Go to the top of the page
+Quote Post
Turson
post 20.04.2014, 12:06:38
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


$o->liczba = 500;
jest git
Go to the top of the page
+Quote Post
Crozin
post 20.04.2014, 12:08:17
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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.

Ten post edytował Crozin 20.04.2014, 12:08:47
Go to the top of the page
+Quote Post
Xart
post 20.04.2014, 12:10:36
Post #4





Grupa: Zarejestrowani
Postów: 267
Pomógł: 6
Dołączył: 8.04.2013

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


@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ą ?

Ten post edytował Xart 20.04.2014, 12:12:25
Go to the top of the page
+Quote Post
Crozin
post 20.04.2014, 12:21:10
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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


Ten post edytował Crozin 20.04.2014, 12:21:42
Go to the top of the page
+Quote Post
Xart
post 20.04.2014, 12:25:13
Post #6





Grupa: Zarejestrowani
Postów: 267
Pomógł: 6
Dołączył: 8.04.2013

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


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..
Go to the top of the page
+Quote Post
Turson
post 20.04.2014, 12:29:03
Post #7





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


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

Ten post edytował Turson 20.04.2014, 12:32:28
Go to the top of the page
+Quote Post
Crozin
post 20.04.2014, 12:31:08
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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.

Ten post edytował Crozin 20.04.2014, 12:31:42
Go to the top of the page
+Quote Post
Xart
post 20.04.2014, 12:34:33
Post #9





Grupa: Zarejestrowani
Postów: 267
Pomógł: 6
Dołączył: 8.04.2013

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


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...
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: 14.08.2025 - 01:33