Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Tworzenie klasy
creovision
post 5.02.2014, 13:30:12
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 2.01.2014

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


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'];
Go to the top of the page
+Quote Post
Geston
post 5.02.2014, 13:54:47
Post #2





Grupa: Zarejestrowani
Postów: 60
Pomógł: 9
Dołączył: 29.11.2010
Skąd: T

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


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. ?>
Go to the top of the page
+Quote Post
tomxx
post 5.02.2014, 13:55:41
Post #3





Grupa: Zarejestrowani
Postów: 172
Pomógł: 27
Dołączył: 5.10.2013

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


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. ?>


Ten post edytował tomxx 5.02.2014, 13:56:39
Go to the top of the page
+Quote Post
creovision
post 5.02.2014, 14:06:28
Post #4





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 2.01.2014

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


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
Go to the top of the page
+Quote Post
Geston
post 5.02.2014, 14:08:01
Post #5





Grupa: Zarejestrowani
Postów: 60
Pomógł: 9
Dołączył: 29.11.2010
Skąd: T

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


Zapomniałeś o " ()" po getID? To funkcja a nie zmienna.
Go to the top of the page
+Quote Post
creovision
post 5.02.2014, 14:12:56
Post #6





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 2.01.2014

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


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
Go to the top of the page
+Quote Post
Geston
post 5.02.2014, 14:15:08
Post #7





Grupa: Zarejestrowani
Postów: 60
Pomógł: 9
Dołączył: 29.11.2010
Skąd: T

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


  1. $_user->username['admin'];


Zmień na:

  1. $_user->username = "admin";
Go to the top of the page
+Quote Post
creovision
post 5.02.2014, 14:17:03
Post #8





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 2.01.2014

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


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;

?

Ten post edytował creovision 5.02.2014, 14:20:47
Go to the top of the page
+Quote Post
markuz
post 5.02.2014, 14:21:45
Post #9





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

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


Kod nie musi wyglądać tylko działać wink.gif Poza tym nikt nie stosuje tego typu odniesień do parametrów klas..


--------------------
Go to the top of the page
+Quote Post
Geston
post 5.02.2014, 14:22:38
Post #10





Grupa: Zarejestrowani
Postów: 60
Pomógł: 9
Dołączył: 29.11.2010
Skąd: T

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


Ż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.
Go to the top of the page
+Quote Post
creovision
post 5.02.2014, 14:27:23
Post #11





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 2.01.2014

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


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.
Go to the top of the page
+Quote Post
Geston
post 5.02.2014, 14:30:02
Post #12





Grupa: Zarejestrowani
Postów: 60
Pomógł: 9
Dołączył: 29.11.2010
Skąd: T

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


To już sam najlepiej wiesz jakie masz tabele oraz co i jak potrzebujesz z nich pobierać. Miłej zabawy.
Go to the top of the page
+Quote Post
creovision
post 5.02.2014, 14:34:07
Post #13





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 2.01.2014

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


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.

Ten post edytował creovision 5.02.2014, 14:34:44
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 - 09:10