Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Klasy i Funkcje
nowymarcin
post 14.11.2013, 16:53:54
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 1
Dołączył: 14.11.2013

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


Witam,

Podczas nauki PHP napotkałem mały problem związany z Klasami i Funkcjami, wiem jak je pisać, wiem jak wywoływać jedną funkcję, ale nie wiem jak je połączyć w działającą całość...

Mam klasę "Baza" w tej klasie posiadam funkcję "Połączenie", "Dodanie", "Edycja", "Usunięcie", "Sprawdzanie" i teraz pytanie jest następujące.

Jak wywołać kilka funkcji na raz w odpowiedniej kolejności, czyli na przykład Połączenie ---> Dodanie ---> Sprawdzanie questionmark.gif
Aby przykładowo jak ktoś kliknie wyślij na formularzu skrypt zrobi takie kółko : połączy się z bazą, następnie doda rekord, sprawdzi czy wszystko jest okej wróci do użytkownika i wyświetli potwierdzenie czynności albo błąd.

Pozdrawiam
Go to the top of the page
+Quote Post
tomxx
post 14.11.2013, 17:02:21
Post #2





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

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


Cytat(nowymarcin @ 14.11.2013, 16:53:54 ) *
Jak wywołać kilka funkcji na raz w odpowiedniej kolejności, czyli na przykład Połączenie ---> Dodanie ---> Sprawdzanie questionmark.gif


Przykładowo wystarczy taki kod (oczywiście zakładam, że chodzi o bazę danych):
  1. <?php
  2.  
  3. function wszystkoNaRaz() {
  4.  
  5. $poł = @połączenie() or die(mysql_error());
  6. $dod = @dodanie() or die(mysql_error());
  7. $spr = @sprawdzanie() or die(mysql_error());
  8.  
  9. }
  10.  
  11. /*Przykład wywołania: */ wszystkoNaRaz();
  12.  
  13. ?>

Powyższy kod przyda się, jeśli chcesz wykonywać po kolei te trzy operacje wielokrotnie. W przeciwnym wypadku wystarczy tak:
  1. <?php
  2. $o = new Baza(); #zakładając, że jeszcze nie utworzyłeś nowego obiektu
  3. $o->połączenie();
  4. $o->dodanie();
  5. $o->sprawdzanie();
  6. ?>

A co do formularza, to podaj dokładny kod.

Ten post edytował tomxx 14.11.2013, 17:03:25
Go to the top of the page
+Quote Post
nowymarcin
post 14.11.2013, 19:34:34
Post #3





Grupa: Zarejestrowani
Postów: 19
Pomógł: 1
Dołączył: 14.11.2013

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


Cytat(tomxx @ 14.11.2013, 17:02:21 ) *
Przykładowo wystarczy taki kod (oczywiście zakładam, że chodzi o bazę danych):
  1. <?php
  2.  
  3. function wszystkoNaRaz() {
  4.  
  5. $poł = @połączenie() or die(mysql_error());
  6. $dod = @dodanie() or die(mysql_error());
  7. $spr = @sprawdzanie() or die(mysql_error());
  8.  
  9. }
  10.  
  11. /*Przykład wywołania: */ wszystkoNaRaz();
  12.  
  13. ?>

Powyższy kod przyda się, jeśli chcesz wykonywać po kolei te trzy operacje wielokrotnie. W przeciwnym wypadku wystarczy tak:
  1. <?php
  2. $o = new Baza(); #zakładając, że jeszcze nie utworzyłeś nowego obiektu
  3. $o->połączenie();
  4. $o->dodanie();
  5. $o->sprawdzanie();
  6. ?>

A co do formularza, to podaj dokładny kod.


Teraz mam kolejne pytanie bo bawię się tymi funkcjami i chcę napisać funkcję która posiada w sobie jakiś wynik i wyrzucić to a więc zrobiłem tak :

  1. <?php
  2. class nauka {
  3. public function dane(){
  4. $dane1 = "To jest tekst testowy w klasie nauka w funkcji dane";
  5. echo $dane1;
  6. }
  7. }
  8.  
  9. $jakiesdane = new nauka();
  10. $jakiesdane->dane();
  11. $jakiesdane->$dane1;
  12. echo $jakiesdane;
  13.  
  14. ?>


Standardowo nie działa
Go to the top of the page
+Quote Post
Lwik
post 14.11.2013, 19:42:34
Post #4





Grupa: Zarejestrowani
Postów: 39
Pomógł: 8
Dołączył: 11.05.2012

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


Tak co do podstaw - nigdy nie zwracaj "echo" w środku funkcji / klasy tylko najlepiej w środku widoku.
Co do kodu, chodzi Ci przecież o zwykły return?
  1. <?PHP
  2. class Nauka {
  3. public $dane = false;
  4. public function setDane()
  5. {
  6. $this->dane = "Zmieniam dane w setDane";
  7. }
  8. public function setDane2($val)
  9. {
  10. $this->dane = $val;
  11. }
  12. public function getDane()
  13. {
  14. return $this->dane;
  15. }
  16. }
  17.  
  18. $data = new Nauka();
  19. echo $data->dane.PHP_EOL;
  20. $data->dane = "ustawiam dane przez __set()";
  21. echo $data->dane.PHP_EOL;
  22. $data->setDane();
  23. echo $data->dane.PHP_EOL;
  24. $data->setDane2("dane, dane");
  25. echo $data->dane.PHP_EOL;
  26. echo "return".PHP_EOL.$data->getDane();


Ten post edytował Lwik 14.11.2013, 19:49:51
Go to the top of the page
+Quote Post
nowymarcin
post 14.11.2013, 20:13:23
Post #5





Grupa: Zarejestrowani
Postów: 19
Pomógł: 1
Dołączył: 14.11.2013

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


Cytat(Lwik @ 14.11.2013, 19:42:34 ) *
Tak co do podstaw - nigdy nie zwracaj "echo" w środku funkcji / klasy tylko najlepiej w środku widoku.
Co do kodu, chodzi Ci przecież o zwykły return?
  1. <?PHP
  2. class Nauka {
  3. public $dane = false;
  4. public function setDane()
  5. {
  6. $this->dane = "Zmieniam dane w setDane";
  7. }
  8. public function setDane2($val)
  9. {
  10. $this->dane = $val;
  11. }
  12. public function getDane()
  13. {
  14. return $this->dane;
  15. }
  16. }
  17.  
  18. $data = new Nauka();
  19. echo $data->dane.PHP_EOL;
  20. $data->dane = "ustawiam dane przez __set()";
  21. echo $data->dane.PHP_EOL;
  22. $data->setDane();
  23. echo $data->dane.PHP_EOL;
  24. $data->setDane2("dane, dane");
  25. echo $data->dane.PHP_EOL;
  26. echo "return".PHP_EOL.$data->getDane();


Nie za dużo tych funkcji questionmark.gif nie można po prostu dodać return do końca mojej klasy ?

  1. class nauka {
  2. $dane1 = "To jest tekst testowy w klasie nauka w funkcji dane";
  3. public function dane($dane1){
  4. return $dane1;
  5. }
  6. }


Pytam bo sie dopiero uczę pisania klas i funkcji i gdzieś widziałem już klasy gdzie wszystko było w jednej klasie, a potem się to wywoływało, przykładowo wracając do połączenia z bazą którą mam w jednej funkcji chyba nie muszę pisać 3 funkcji aby na końcu dopisać If'a czy połączenie z bazą zostało zrobione pomyślnie questionmark.gif

Ten post edytował nowymarcin 14.11.2013, 20:14:38
Go to the top of the page
+Quote Post
Lwik
post 14.11.2013, 20:37:24
Post #6





Grupa: Zarejestrowani
Postów: 39
Pomógł: 8
Dołączył: 11.05.2012

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


Chciałem pokazać kilka przykładów zastosowań, dlatego kilka metod klasy.
Pisząc we wskazany przez Ciebie sposób to dalej kod strukturalny. :]
Co do metodyki to tak, dzięki oop i wyjątkom jesteś w stanie efektywnie zdebugować aplikację (czyli zdecydować kiedy wysłać formularz, kiedy zwrócić wypełniony, kiedy opieprzyć człowieka za to, że jest botem;)
Przykład:
  1. class Nauka{
  2. public $dane;
  3. function setDane($val)
  4. {
  5. if(is_numeric($val))
  6. {
  7. $this->dane = $val;
  8. }else throw new Exception("Tekst przyjął złą wartość");
  9. }
  10. }
  11. try{
  12.  
  13. $data = new Nauka();
  14. $data->setDane('sasd');
  15. echo $data->dane;
  16. }catch (Exception $e)
  17. {
  18. die("Wystąpił błąd: ".$e->getMessage());
  19. }

Połączenie z bazą w innych klasach możesz definiować w kilka sposobów:
  1. class Nauka{
  2. //metoda __construct jest automatycznie wywoływana podczas inicjowania klasy
  3. public function __construct()
  4. {
  5. //połączenie
  6. }
  7. }

  1. class Nauka{
  2. //metoda __construct jest automatycznie wywoływana podczas inicjowania klasy
  3. public function __construct()
  4. {
  5. $this->funkcjaPołaczenie();
  6. }
  7. }

  1. class Nauka{
  2. //metoda __construct jest automatycznie wywoływana podczas inicjowania klasy
  3. public function __construct()
  4. {
  5. // pobieranie obiektu innej klasy odpowiedzialnej za bazę danych.
  6. }
  7. }


Kontrolery są po to byś mógł w prosty sposób pobierając np. dane z POST mógł zrealizować zadanie w kilku liniach kodu.
Poczytaj o MVC w PHP, powinno Ci to zrobić trochę jaśniejszy pogląd o co mi chodzi.

Ten post edytował Lwik 14.11.2013, 20:41:24
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: 27.04.2024 - 13:40