Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z klasą. Nie przekazuje danych.
Forum PHP.pl > Forum > Przedszkole
maxil
Witam. Od pewnego czasu borykam się z problemem nieprzekazywania danych do klasy, chodzi mi tylko o jedno pole które nie jest przekazywane tym polem jest uid.
Przedstawię wam kawałek mojej klasy:

  1. <?php
  2. class User
  3. {
  4. private $uid;
  5. private $fields;
  6.  
  7. public function __construct()
  8. {
  9. $this->uid = null;
  10. $this->fields = array('username' => '',
  11. 'password' => '',
  12. 'email' => '',
  13. 'avatar' => '',
  14. 'description' => '',
  15. 'isActive' => false);
  16. }
  17.  
  18. public function __get($field)
  19. {
  20. if ($field == 'uid')
  21. {
  22. return $this->uid;
  23. }
  24. else
  25. {
  26. return $this->fields[$field];
  27. }
  28.  
  29. }
  30.  
  31. public function __set($field, $value)
  32. {
  33. if (array_key_exists($field, $this->fields))
  34. {
  35. $this->fields[$field] = $value;
  36. }
  37. }
  38.  
  39. public function test()
  40. {
  41. return $this->uid;
  42. }
  43. ?>


klasę wywołuję:

  1. $user = new User();
  2. $user->uid = 15;
  3. echo $user->test();


Chciałbym się dowiedzieć dlaczego do mojej klasy nie jest przekazywany id usera, z innymi danymi nie ma problemu.
Fifi209
Bo nie trzymasz jej w tablicy jak wszystkiego, w __get zrobiłeś na to warunek, w __set już go brakuje.
morbic
Wywal private sprzed deklaracji $uid - to wersja szybsza.

A ambitniejsza - zmodyfikować set() i poprzez te funkcję ustawiać wartość uid.
maxil
Cytat(morbic @ 17.07.2011, 00:03:42 ) *
Wywal private sprzed deklaracji $uid - to wersja szybsza.

A ambitniejsza - zmodyfikować set() i poprzez te funkcję ustawiać wartość uid.


Twój sposób zadziałał, jednak zrobiłem to troszkę inaczej.
Nie wywaliłem private tylko przerobiłem magicznego setera.
Teraz on wygląda tak:

  1. public function __set($field, $value)
  2. {
  3. if (array_key_exists($field, $this->fields))
  4. {
  5. $this->fields[$field] = $value;
  6. }
  7. else if ($field == 'uid')
  8. {
  9. $this->uid = $value;
  10. }
  11. }


Dzięki za szybką odpowiedź.
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.