Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Niezrozumialy konstruktor obiektu
Forum PHP.pl > Forum > Przedszkole
Wolfie
Witam

Probuje zrozumiec wzorczec mvc zawarty tutaj :
Wzorzec MVC

Ale wystrpuje tutaj niezrozumialy dla mnie sposob instancjacji obiektu klasy , mianowicie :

W przykladzie w linku wyzej mamy zdefiniowana klase DataAccess, tutaj wszystko zrozumialem.
Ale nastepnie w klasie ProductModel mamy cos takiego :

  1. <?php
  2. class ProductModel {
  3.    /**
  4.     * Private
  5.     * $dao an instance of the DataAccess class
  6.     */
  7.    var $dao;
  8.  
  9.    //! A constructor.
  10.    /**
  11.     * Constucts a new ProductModel object
  12.     * @param $dbobject an instance of the DataAccess class
  13.     */
  14.    function ProductModel (&$dao) {
  15.        $this->dao=& $dao;
  16. ?>


Jakim cudem parametr $dao jest instancja klasy DataAccess ? tak jak to jest napisane tutaj w komentarzu.
Tak samo dalej taki sam przypadek dla klasy ProductView:

  1. <?php
  2. class ProductView {
  3.    /**
  4.     * Private
  5.     * $model an instance of the ProductModel class
  6.     */
  7.    var $model;
  8.  
  9.    /**
  10.     * Private
  11.     * $output rendered HTML is stored here for display
  12.     */
  13.    var $output;
  14.  
  15.    //! A constructor.
  16.    /**
  17.     * Constucts a new ProductView object
  18.     * @param $model an instance of the ProductModel class
  19.     */
  20.    function ProductView (&$model) {
  21.        $this->model=& $model;
  22.    }
  23. ?>


Jak widzimy tutaj $model jest instancja klasy ProductModel.
Zupelnie tego nie rozumiem.
nospor
Cytat
Jakim cudem parametr $dao jest instancja klasy DataAccess ?

A jakby napisali:
* $dao an instance of the AlaMaKota class
To bys strzelal ze jest klasy AlaMaKota?
To jest tylko komentarz, informujacy:
- nas czytajacych
- edytory podpowiadające
ze tu jest oczekiwany obiekt danej klasy. Ale mozemy tam wlozyc cokolwiek. I albo skrypt to obsluzy albo nie smile.gif
revyag
@Wolfie, zobacz ten przykład to wyjaśnia:
  1. <?php
  2. $dao=& new DataAccess ('localhost','user','pass','dbname');
  3. $productModel=& new ProductModel($dao);
  4. $productController=& new ProductController($productModel,$_GET);
  5. echo $productController->display()
  6. ?>


Chyba nie za bardzo rozumiesz podstawy programowania i przekazywanie parametrów.
Wolfie
Czyli rozumiem ze w miejsce komentarza powinien byc kod ktory tworzy obiekt klasy ?
nospor
nie, komentarz ma zostan nie ruszony.
A skad do klasy dojdzie obiekt DataAccess to revyag juz ci w kodzie pokazal
Wolfie
Z tego co mi sie wydaje to te komentarze sluza po to zeby zakomunikowac co sie dzieje w danym miejscu wiec np:

  1. <?php
  2. //! A constructor.
  3.    /**
  4.     * Constucts a new DataAccess object
  5.     * @param $host string hostname for dbserver
  6.     * @param $user string dbserver user
  7.     * @param $pass string dbserver user password
  8.     * @param $db string database name
  9.     */
  10.    function DataAccess ($host,$user,$pass,$db) {
  11.        $this->db=[url="http://www.php.net/mysql_pconnect"]mysql_pconnect[/url]($host,$user,$pass);
  12.        [url="http://www.php.net/mysql_select_db"]mysql_select_db[/url]($db,$this->db);
  13.    }
  14. ?>


mowi nam to co widac , wiec tak samo w pozostalych przypadkach komentarz wyzej mowi nam co sie dzieje nizej.
Czyz nie ?
nospor
no tak, komentarze są po to, by opisywac sytuacje. Ale jak ich nie bedzie to nie ma to zadnego wplywu na skrypt.

Dodatkowo dzieki komentarzom porzadne edytory podpowiadają składnie.
Na podstawie komentarzy tworzone też są automatycznie dokumentacje.

Ale komentarz to komentarz i nie ma zadnego wplywu na kod.
webdevil
Cytat(Wolfie @ 17.02.2009, 16:09:20 ) *
Z tego co mi sie wydaje to te komentarze sluza po to zeby zakomunikowac co sie dzieje w danym miejscu wiec np:
mowi nam to co widac , wiec tak samo w pozostalych przypadkach komentarz wyzej mowi nam co sie dzieje nizej.
Czyz nie ?


ja bym to ujął inaczej - w tych wypadkach co pokazałeś komentarze @param mówią czym MAJĄ być przekazywane zmienne (np. instancją klasy DataAccess) a nie co się dzieje w danym miejscu...
Wolfie
No tak to rozumiem ze komentarze nie maja wplywu na kod
Ale cos autor mial do przekazania
Wiec jezeli komentarz wyzej opisuje sytuacje ktora jest ponizej to

  1. <?php
  2. //! A constructor.
  3.    /**
  4.     * Constucts a new ProductView object
  5.     * @param $model an instance of the ProductModel class
  6.     */
  7.    function ProductView (&$model) {
  8.        $this->model=& $model;
  9.    }
  10. ?>


Ja w dalszym ciagu nie rozumiem tej kwestii ze zmienna $model jest instancja klasy ProductModel....
webdevil
Cytat(Wolfie @ 17.02.2009, 16:19:22 ) *
zmienna $model jest instancja klasy ProductModel....


nie - nie jest! ona ma nią być. tak jak pisał revyag w swoim poście - Ty przy tworzeniu instancji klasy ProductView jako parametr masz podać właśnie instancję klasy ProductModel...
Wolfie
A jakby to wygladalo w praktyce ? Bo nie jestem jeszcze mistrzem w programowaniu obiektowym..

$obiekt = new ProductViev($model);

Cos takiego ?
nospor
przeciez dostales juz kod od revyaga!!!!
mike
Cytat(Wolfie @ 17.02.2009, 16:36:51 ) *
Cos takiego ?
Dokładnie tak.

Cytat(nospor @ 17.02.2009, 16:39:45 ) *
przeciez dostales juz kod od revyaga!!!!
~nospor wiesz przecież, że tu ludzie czytają bez zastanowienia się. Po co się wysilać?
nospor
A poto, by nie mowil ze bez ostrzezenia dostal ostrzezenie aaevil.gif
Wolfie
nie kapuje nic z tych komentarzy.

Nie wogole nie wysilam sie , probuje zrozumiec mvc od 5 dni , ale to wogole nie jest wysilek przeciez......

Tylko boje sie cokolwiek pisac o mvc bo i tak czytalem ze wszystkie posty o mvc beda zamkniete
nospor
Cytat
Nie wogole nie wysilam sie , probuje zrozumiec mvc od 5 dni , ale to wogole nie jest wysilek przeciez......


sluchaj, dostajesz kod:
  1. <?php
  2. $dao=& new DataAccess ('localhost','user','pass','dbname');
  3. $productModel=& new ProductModel($dao);
  4. $productController=& new ProductController($productModel,$_GET);
  5. echo $productController->display();
  6. ?>

a ty jak gdyby nigdy nic z tekstem:
"A jak to bedzie wygladac z praktycznego punktu widzenia"

Naprawde nie widzisz, ze cos tu jest nie tak?
mike
Cytat(Wolfie @ 17.02.2009, 16:49:44 ) *
Nie wogole nie wysilam sie , probuje zrozumiec mvc od 5 dni , ale to wogole nie jest wysilek przeciez......
Ty się lepiej zabierz za podstawy programowania obiektowego a nie za wzorce projektowe.
Nie rozumiesz prostych pojęć typu przekazanie instancji klasy jako argument funkcji.
Wolfie
Widze , to ze komentarze nie sa zgodne z tym co sie dzieje w kodzie smile.gif

Bo nigdzie nie ma obiektu klasy ProductView z parametrem $model lub obiektu klasy DataAccess z parametrem $dbobject

Trzeba bylo od razu po ludzku - Przekazanie instancji klasy jako parametru funkcji to akurat rozumiem smile.gif
mike
Cytat(Wolfie @ 17.02.2009, 16:54:22 ) *
Bo nigdzie nie ma obiektu klasy ProductView z parametrem $model lub obiektu klasy DataAccess z parametrem $dbobject
Mam zagadkę dla Ciebie ~Wolfie. Jaka jest różnica w deklaracjach następujących funkcji:
  1. <?php
  2.  
  3. function jakaśFunkcja($blabla) {
  4. }
  5.  
  6. function jakaśFunkcja($dupaBlada) {
  7. }
  8.  
  9. function jakaśFunkcja($viewModel) {
  10. }
  11.  
  12. function jakaśFunkcja($productController) {
  13. }
  14.  
  15. ?>

Odpowiedź: żadna.
Wolfie
No to po co je wywolywac z roznym parametrem ?
mike
Cytat(Wolfie @ 17.02.2009, 17:01:54 ) *
No to po co je wywolywac z roznym parametrem ?
Ty MVC chcesz się uczyć? O programowaniu obiektowym wspominasz?
Przecież Ty nie masz zielonego pojęcia o programowaniu proceduralnym. Zapraszam do czytania: PHP Manual > Opis języka > Funkcje
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.