Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Programowanie obiektowe jak zacząć
Forum PHP.pl > Forum > Przedszkole
benq20
Witam chciałem się nauczyć programowania obiektowego w php ale nie wiem z kąd ma wziąć samouczki takie kompletne zawierające najważniejsze rzeczy żebym potem nie musiał znów do czegoś wracać?
sada
n.p.
http://webcity.pl/webcity/programowanie_ob...e_w_php_5_cz__1
wydaje mi się , że uczenie się od razu z bardzo szczegółowego opracowania jest błędem.
Najpierw poznaj ogólną filozofię (rusztowanie) programowania obiektwego , a później pogłębiaj je.
IceManSpy
Stwórz sobie jakąś prostą klasę i na niej eksperymentuj. Stwórz sobie np klasę kwadrat, w niej pola bok i pole, potem funkcje obliczające pole. Potem zrób prostokąt i to samo z nią. Potem możesz pobawić się w dziedziczenie, zrób sobie klasę figura i po niej dziedzicz np funkcję nadającą nazwę.
Takie proste przykłady, a potem zacznij myśleć o jakiś konkretniejszych rzeczach, które są przydatne w jakiejś aplikacji.

W jakimś kursie było coś o butelce. Klasa butelka, jej pole to objętość. Stworzono konstruktor jako max objętość butelki, a potem metody dolejDoButelki wylejZButeki itd. No i zabawa smile.gif
benq20
Narazie bewię sie z web city bo faktycznie dość dokładnie tam opisali i w najnowszym php 5.
Rozumiem że to jest głownie do tworzenia aplikacji a można prosić o jkąś aplikacje stworzoną w ten sposób?
IceManSpy
Całej aplikacji nie tworzy się za pomocą 1 klasy. Każda klasa to jakiś element układanki systemu.
tabassccoo
Odnośnie zadanka z butelką:
Cytat
Napisz klasę pojemnik i rozszerz o dwie następne wiaderko oraz butelka. Aplikacja musi mieć możliwość wlewania jak i wylewania określonej wody z butelki. Każdy pojemnik ma swoją pojemność, która jest sprawdzana przy wlewaniu wody, jeśli jest przekroczona to aplikacja informuje ile wody zostało rozlane.

Akcje jakie można wykonać.
1. Stworzyć butelkę o pojemności 5l,
2. Wlać do niej 3l
3. Wylać z niej 2l
4. Wlać do niej 5l -> powinien wyskoczyć komunikat rozlano 1l

Przemyślcie hermetyzacje danych, oczywiście jest to program dosyć abstrakcyjny ale pozwoli wykorzystać dziedziczenie, można (opcjonalnie) zastosować interfejs, polimorfizm.

Nie chodzi o to by tworzyć formularze typu wlewanie wody itp, chodzi o logikę.


Fajny opis obiektowego php jest na wikibooks i do tego w ojczystym języku.
Korri
Właściwie to coś takiego jak kurs programowania obiektowego php nie ma sensu. Obiektowość to tylko sposób myślenia. Dobrym przykładem jest używanie bazy danych w oparciu o własną klasę:
  1. class Database {
  2. var $pdo;
  3. function __construct() {
  4. try {
  5. $this->pdo = new PDO(DB_DRIVER . ':host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USERNAME, DB_PASSWORD);
  6. $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  7. $this->pdo->query('SET CHARSET utf8');
  8. }
  9. catch(PDOException $e) {
  10. die($e->getMessage());
  11. }
  12. }
  13. function __destruct() {
  14. unset($this->pdo);
  15. }
  16. function query($sql, $userData=NULL) {
  17. try {
  18. $result = $this->pdo->query($sql);
  19. $return = $result->fetchAll(PDO::FETCH_CLASS);
  20. return $return ? $return : "Nic nie znaleziono";
  21. }
  22. catch(PDOException $e) {
  23. die($e->getMessage());
  24. }
  25.  
  26. }
  27. }

Jeśli nagle stwierdzisz, że nie chcesz używać PDO bo wolisz PEARDB to wystarczy przepisać jedną klasę nie ruszając całej reszty kodu.
Moim zdaniem programowanie obiektowe jest jak klocki - najpierw wytłaczamy klocki z plastiku a później budujemy co trzeba.

Innym przykładem jest pasek boczny na stronie.
Załóżmy, że taki pasek składa się z modułów, które mają postać:
  1. <section id="module_nazwaKlasy">
  2. <header>Jakaś widoczna nazwa panelu</header>
  3. <div class="content">
  4. Dynamicznie generowany środek modułu
  5. </div>
  6. </section>

Napiszmy więc klasę bazową "Module":
  1. class Module {
  2. var $name;
  3. var $content;
  4.  
  5. function __toString() {
  6. $className = strtolower(get_class($this));
  7. return "
  8. <section id=\"module_{$className}\">
  9. <header>{$this->name}</header>
  10. <div class=\"content\">
  11. {$this->content}
  12. </div>
  13. </section>
  14. ";
  15. }
  16. }

Później klasy szczególnych modułów piszemy prosto:
  1. class Example extends Module {
  2. function __construct() {
  3. $this->name = "Test";
  4. $this->content = "Test czegoś <b>BOLD</b>";
  5. }
  6. }

Żeby skorzystać z tego kodu i wygenerować kod całego panelu używamy:
  1. $modules = array('Example'); //w tej tablicy są nazwy wszystkich klas modułów, których chcemy używać na naszym panelu bocznym
  2. $finalHTML = '';
  3. foreach($modules as $module) {
  4. $temp = new $module;
  5. $finalHTML .= $temp;
  6. }
cer98
Dodam, że interfejsów można używać w następujący sposób :

  1. interface BInterface{
  2.  
  3. public function b($model);
  4.  
  5. }
  6.  
  7.  
  8. class Aa{
  9.  
  10. private $a;
  11.  
  12. public function __construct(){
  13.  
  14. }
  15.  
  16.  
  17. public function a(BInterface $v){
  18.  
  19. if($v instanceof Bb){
  20.  
  21. $this->a = 4;
  22.  
  23. $v->b($this->a);
  24.  
  25.  
  26. }
  27.  
  28. }
  29.  
  30. }
  31.  
  32.  
  33. class Bb implements BInterface{
  34.  
  35. public function __construct(){
  36.  
  37. }
  38.  
  39. public function b($model){
  40.  
  41. print $model;
  42.  
  43. }
  44.  
  45. }
  46.  
  47.  
  48. $one = new Aa;
  49. $two = new Bb;
  50. $one->a($two);
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.