Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mapper? dynamiczny obiekt w klasie
Forum PHP.pl > Forum > PHP > Object-oriented programming
drbane
Witam, nie mam zielonego pojęcia jak zrobić coś takiego:

  1. <?php
  2. $this->loadModel('nazwa_model');
  3. $this->nazwa_model->funkcja();
  4. ?>


A konkretniej chodzi mi o to żeby, w danej klasie utworzyć (dynamicznie) obiekt i móc odwołać się do jego właściwości/metod, właśnie w taki sposób jaki przedstawiłem w przykładzie.

Wiem że chodzi o tzw. mapper (przynajmniej tak mi się wydaje), ale nie wiem jak to ugryźć.
Ziels
  1. <?php
  2. class someclass{
  3.  public $maska;
  4.  
  5.  public function loadModel($nazwa){
  6. $this -> maska = new $nazwa;
  7. return true; 
  8.  }
  9. }
  10. ?>


W czym problem? winksmiley.jpg
drbane
W tym że odwołuję się do tego w ten sposób:

  1. <?php
  2. $ob->maska->model->metoda();
  3. ?>


a chodzi mi o:

  1. <?php
  2. $ob->model->metoda();
  3. ?>


winksmiley.jpg
dr_bonzo
__get()

$this->loadModel( 'costam');
wczytujesz klase, tworzysz instancje i zapisujesz w jakiejsc tablicy

$this->costam

odczytywany __get()em zwraca ci ten obiekt modelu

reszta to juz proscizna
drbane
Może jakiś przykład? O ile to nie problem.
pbnan
  1. <?php
  2. class bla {
  3. private $_model, $_model_name;
  4. function load_model($a_name) {
  5. //ladowanie modelu...
  6. $this->_model = $model; //$model to zaladowany juz model
  7. $this->_model_name = $a_name;
  8. }
  9. function __get($a_name) {
  10. if ($a_name == $this->_model_name) { return $this->_model; }
  11. }
  12. }
  13. ?>

Może coś takiego?
dr_bonzo
No a co w sytuacji kiedy chcemy posiadac jednoczesnie kilka modeli zaladowanych?
pbnan
To robisz tablicę, co za problem? smile.gif
Oczywiście tablicę modeli + nazw (dla mojego przykładu) lub coś innego, jeśli to ktoś inaczej rozwiązał smile.gif
drbane
O to właśnie chodziło - niby proste, ale trochę miałem z tym problem. Dzięki za pomoc, pozdrawiam.
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.