Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Tablica wewnątrz klasy
Forum PHP.pl > Forum > PHP
soomal
Na projekt muszę wykonać sklep internetowy w PHP. Ostatnie kilka projektów wykonałem na cakephp, ten muszę zrobić w czystym php, więc postanowiłem napisać swojego mini-quasi-frameworka, ale mam problem na starcie.

Chcę mieć klasę Model, która przetrzymywałaby w tablicy obiekty klasy atrybut. Potem mógłbym z tego ładnie sobie generować formularz lub podstawowe zapytania do SQLa.
Mam problem z zadeklarowaniem tablicy w klasie Model. W funkcji dodaj_atrybut elementy nie zapisują się.

Z góry dziękuję za pomoc.

  1. <?php
  2.  
  3. /*
  4.  * class: Atrybut
  5.  * name:                nazwa atrybutu uzywana w php
  6.  * name_in_db:    nazwa atrybutu w bazie danych
  7.  * sql_type:        typ w notacji sql
  8.  * form:                tresc elementu (html) w formularzu np. <input ... />
  9.  */
  10.  
  11. class Atrybut {
  12. //    var $name, $name_in_db, $sql_type, $form;
  13.    public function __construct() {
  14.        $this->name = '';
  15.        $this->name_in_db = '';
  16.        $this->sql_type = '';
  17.        $this->form = '';
  18.    }
  19. }
  20.  
  21. class Model {
  22.    //tablica atrybutow
  23.    var $atrybuty = array();
  24.    public function __construct() {
  25.      $this->atrybuty = array();
  26.    }
  27.    
  28.    public function dodaj_atrybut($name,$name_in_db,$sql_type,$form)
  29.    {
  30.  
  31.        $atr = new Atrybut;
  32.        $atr->name = $name;
  33.        $atr->name_in_db = $name_in_db;
  34.        $atr->sql_type = $sql_type;
  35.        $atr->form = $form;
  36.        
  37.        //pokazuje 1111, za kazdym razem pokazuje, ze $atrybuty nie sa zadeklarowane
  38.        echo !isset($atrybuty);
  39.        
  40.        $atrybuty_l = count($atrybuty);
  41.        $atrybuty[$atrybuty_l] = $atr;
  42.    }
  43.    
  44.    public function lista_atrybutow()
  45.    {
  46.        $atrybuty_l = count($atrybuty);
  47.        //echo $atrybuty_l;
  48. //        foreach ($atrybuty as $a)
  49.        for($i=0;$i<=$atrybuty_l;$i++)
  50.        {
  51.            echo '<p>';
  52.            echo 'Nazwa: '.$a.name.
  53.                 '; Nazwa w bazie danych: '.$a->name_in_db.
  54.                 '; Typ SQL: '.$a->sql_type.
  55.                 '; Formularz: '.$a->form;
  56.            echo '</p>';
  57.        }
  58.    }
  59. }
  60.  
  61. $post = new Model;
  62.  
  63. $post->dodaj_atrybut('nazwa', 'name', 'VARCHAR(10)', '<input type=""/>');
  64. $post->dodaj_atrybut('nazwa', 'name', 'VARCHAR(10)', '<input type=""/>');
  65. $post->dodaj_atrybut('nazwa', 'name', 'VARCHAR(10)', '<input type=""/>');
  66. $post->dodaj_atrybut('nazwa', 'name', 'VARCHAR(10)', '<input type=""/>');
  67.  
  68.  
  69. $post->lista_atrybutow();
  70.  
  71. ?>


Wynik:
  1. 1111
  2.  
  3. Nazwa: ; Nazwa w bazie danych: ; Typ SQL: ; Formularz:
Mize
Po pierwsze nie...

  1. <?php
  2. var $atrybuty;
  3. ?>


Tylko.

  1. <?php
  2. private/public/protected $atrybyty;
  3. ?>


I odwołanie do atrybutu obiektu robisz tak.

  1. <?php
  2. $this->atrybuty;
  3. ?>


W metodzie dodaj_atrybut nie ma zadeklarowanej zmiennej $atrybuty, więc zwraca false.
Musisz dac, tak.

  1. <?php
  2. $this->atrybuty[$foo] = $bar;
  3. ?>
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.