Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Tworzenie klasy
creovision
post
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
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
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
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
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
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 (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Geston
post
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
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
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ć (IMG:style_emoticons/default/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
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
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ć (IMG:style_emoticons/default/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
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
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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.09.2025 - 16:25