Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Tworzenie klasy
Forum PHP.pl > Forum > Przedszkole
creovision
Witam,
czy pomoże mi ktoś z utworzeniem prostej klasy PHP dla takiego kodu:
  1. function getUserID($nickname) {
  2. $ds = mysql_fetch_array(safe_query("SELECT userID FROM ".PREFIX."user WHERE nickname='".$nickname."'"));
  3. return $ds['userID'];
  4. }
  5.  
  6. function getUsername($userID) {
  7. $ds = mysql_fetch_array(safe_query("SELECT username FROM ".PREFIX."user WHERE userID='".$userID."'"));
  8. return $ds['username'];
  9. }
  10.  
  11. function getUserEmail($userID) {
  12. $ds = mysql_fetch_array(safe_query("SELECT email FROM ".PREFIX."user WHERE userID='".$userID."'"));
  13. return getinput($ds['email']);
  14. }
?
Bym mógł pobierać np. ID użytkownika na zasadzie $_user->id['username'];
Geston
Można to zrobić na kilka sposobów w zależności od tego do czego jeszcze będziesz używał tej klasy i jak.

Tak żeby robiła tylko to co wkleiłeś wyżej:

  1. <?php #class_User.php
  2.  
  3. // klasa User
  4.  
  5. class User {
  6.  
  7. public function __construct() {
  8.  
  9. }
  10.  
  11. public function getUserID($nickname) {
  12. $ds = mysql_fetch_array(safe_query("SELECT userID FROM ".PREFIX."user WHERE nickname='".$nickname."'"));
  13. return $ds['userID'];
  14. }
  15.  
  16. public function getUsername($userID) {
  17. $ds = mysql_fetch_array(safe_query("SELECT username FROM ".PREFIX."user WHERE userID='".$userID."'"));
  18. return $ds['username'];
  19. }
  20.  
  21. public function getUserEmail($userID) {
  22. $ds = mysql_fetch_array(safe_query("SELECT email FROM ".PREFIX."user WHERE userID='".$userID."'"));
  23. return getinput($ds['email']);
  24. }
  25. }
  26.  
  27. ?>


i w pliku

  1. <?php
  2.  
  3. // dołączenie pliku z definicjami klas
  4. require_once('../class_User.php');
  5.  
  6. // utworzenie obiektu klasy User
  7. $user = new User();
  8.  
  9. $id = $user->getUserID['jakis_login'];
  10.  
  11. ?>
tomxx
Spróbuj tak:
  1. <?php
  2. class User
  3. {
  4. public $nickname;
  5. public $userID;
  6.  
  7. function getUserID() {
  8. $ds = mysql_fetch_array(safe_query("SELECT userID FROM ".PREFIX."user WHERE nickname='".$this->nickname."'"));
  9. return $ds['userID'];
  10. }
  11.  
  12. function getUsername() {
  13. $ds = mysql_fetch_array(safe_query("SELECT username FROM ".PREFIX."user WHERE userID='".$this->userID."'"));
  14. return $ds['username'];
  15. }
  16.  
  17. function getUserEmail() {
  18. $ds = mysql_fetch_array(safe_query("SELECT email FROM ".PREFIX."user WHERE userID='".$this->userID."'"));
  19. return getinput($ds['email']);
  20. }
  21. }
  22.  
  23. $_user = new User();
  24. $_user->nickname = 'nick'; //ustawienie właściwości $nick
  25. $_user->id = $_user->getUserID(); //przypisanie do właściwości ID użytkownika
  26. echo $_user->id; //wyświetla ID użytkownika
  27.  
  28. ?>
creovision
user.php
  1. class User {
  2. public $username;
  3. public $userID;
  4.  
  5. public function getID() {
  6. $data = mysql_fetch_array(safe_query("SELECT userID FROM ".PREFIX."user WHERE username='".$this->username."'"));
  7. return $data['userID'];
  8. }
  9. }


index.php
  1. $_user = new User();
  2. $_user->username['admin'];
  3. echo $_user->getID;


Otrzymuję błąd:
  1. Notice: Undefined property: User::$getID in /home/system/domains/example.com/public_html/system/components/index.php on line 32
Geston
Zapomniałeś o " ()" po getID? To funkcja a nie zmienna.
creovision
Cytat(Geston @ 5.02.2014, 15:08:01 ) *
Zapomniałeś o " ()" po getID? To funkcja a nie zmienna.


Tak wiem, już to zrobiłem zanim napisałeś ale zmieniło się tylko to iż nie otrzymuję błędu ale wyniku również nie ma tongue.gif
Geston
  1. $_user->username['admin'];


Zmień na:

  1. $_user->username = "admin";
creovision
Cytat(Geston @ 5.02.2014, 15:15:08 ) *
  1. $_user->username['admin'];


Zmień na:

  1. $_user->username = "admin";


Ok, działa.
A co należy zrobić by wartości zmiennych podawać w formie
  1. $_user->username['admin'];
?
Tak kod wygląda ładniej.

Może zamiast:
  1. public $username;
  2. public $userID;


  1. var $username;
  2. var $userID;

?
markuz
Kod nie musi wyglądać tylko działać wink.gif Poza tym nikt nie stosuje tego typu odniesień do parametrów klas..
Geston
Żeby było jeszcze ładniej to zrób jeszcze inaczej, bo ogólnie to komplikujesz sobie pracę, pobierasz dane z tabeli userID na podstawie nickname po to aby na podstawie userID pobrać kolejne dane z tej samej tabeli. Używając klasy możesz skrócić sobie pracę.

  1. <?php #class_User.php
  2.  
  3. // klasa User
  4.  
  5. class User {
  6.  
  7. private $userID;
  8. private $username;
  9. private $email
  10.  
  11. public function __construct($nickname = "") {
  12. // konstruktor
  13.  
  14. if ($nickname != "") {
  15. $ds = mysql_fetch_array(safe_query("SELECT userID, username, email FROM ".PREFIX."user WHERE nickname='".$nickname."'"));
  16. $this->userID = $sd['userID'];
  17. $this->username = $sd['username'];
  18. $this->email = getinput($sd['email']);
  19. }
  20. }
  21.  
  22. public function __get($arg) {
  23. // funkcja zwracająca wartości zmiennych
  24.  
  25. return $this->$arg;
  26. }
  27. }
  28.  
  29. ?>


i pliczek

  1. <?php
  2.  
  3. // dołączenie plików z definicjami klas
  4. require_once('../class_User.php');
  5.  
  6. $nickname = "admin" // tak czy inaczej pobrana wartość z formularza przypisana zmiennej nickname
  7.  
  8. // utworzenie obiektu klasy User
  9. $user = new User($nickname);
  10.  
  11. $id = $user->__get("userID");
  12. $username = $user->__get("username");
  13. $email = $user->__get("email");
  14.  
  15. ?>


Tworząc obiekt podajesz mu od razu nickname który pobrałeś czy to z formularza czy sam przypisałeś zmiennej. Konstruktor go przejmuje i z jego pomocą pobiera z bazy danych potrzebne pola od razu gdy tylko obiekt jest utworzony, nie trzeba wywoływać żadnych dodatkowych funkcji. Później tylko z pomocą funkcji __get() odwołujesz się do kolejnych zmiennych prywatnych w klasie.
creovision
Cytat(markuz @ 5.02.2014, 15:21:45 ) *
Kod nie musi wyglądać tylko działać wink.gif Poza tym nikt nie stosuje tego typu odniesień do parametrów klas..

Jakiego typu ? "var" ?

Cytat(Geston @ 5.02.2014, 15:22:38 ) *
Żeby było jeszcze ładniej to zrób jeszcze inaczej, bo ogólnie to komplikujesz sobie pracę, pobierasz dane z tabeli userID na podstawie nickname po to aby na podstawie userID pobrać kolejne dane z tej samej tabeli. Używając klasy możesz skrócić sobie pracę.

  1. <?php #class_User.php
  2.  
  3. // klasa User
  4.  
  5. class User {
  6.  
  7. private $userID;
  8. private $username;
  9. private $email
  10.  
  11. public function __construct($nickname = "") {
  12. // konstruktor
  13.  
  14. if ($nickname != "") {
  15. $ds = mysql_fetch_array(safe_query("SELECT userID, username, email FROM ".PREFIX."user WHERE nickname='".$nickname."'"));
  16. $this->userID = $sd['userID'];
  17. $this->username = $sd['username'];
  18. $this->email = getinput($sd['email']);
  19. }
  20. }
  21.  
  22. public function __get($arg) {
  23. // funkcja zwracająca wartości zmiennych
  24.  
  25. return $this->$arg;
  26. }
  27. }
  28.  
  29. ?>


i pliczek

  1. <?php
  2.  
  3. // dołączenie plików z definicjami klas
  4. require_once('../class_User.php');
  5.  
  6. $nickname = "admin" // tak czy inaczej pobrana wartość z formularza przypisana zmiennej nickname
  7.  
  8. // utworzenie obiektu klasy User
  9. $user = new User($nickname);
  10.  
  11. $id = $user->__get("userID");
  12. $username = $user->__get("username");
  13. $email = $user->__get("email");
  14.  
  15. ?>


Tworząc obiekt podajesz mu od razu nickname który pobrałeś czy to z formularza czy sam przypisałeś zmiennej. Konstruktor go przejmuje i z jego pomocą pobiera z bazy danych potrzebne pola od razu gdy tylko obiekt jest utworzony, nie trzeba wywoływać żadnych dodatkowych funkcji. Później tylko z pomocą funkcji __get() odwołujesz się do kolejnych zmiennych prywatnych w klasie.


Z tym, że aktualnie mam 5 tabel w których przechowuję dane użytkowników i za pomocą tej klasy chciałbym wyciągać te dane.
Geston
To już sam najlepiej wiesz jakie masz tabele oraz co i jak potrzebujesz z nich pobierać. Miłej zabawy.
creovision
Cytat(Geston @ 5.02.2014, 15:30:02 ) *
To już sam najlepiej wiesz jakie masz tabele oraz co i jak potrzebujesz z nich pobierać. Miłej zabawy.


Ok, zrobiłem to w tej formie i działa smile.gif
  1. class User {
  2.  
  3. private $username;
  4.  
  5. public function __construct($userID = "") {
  6. if(!empty($userID)) {
  7. $user = mysql_fetch_array(safe_query("SELECT username FROM ".PREFIX."user WHERE userID={$userID}"));
  8. $this->username = $user['username'];
  9. }
  10. }
  11.  
  12. public function get($arg) {
  13. return $this->$arg;
  14. }
  15. }

Dzięki wielkie za pomoc exclamation.gif!
Serdecznie pozdrawiam.
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.