ArnisR Posted July 19, 2012 Report Share Posted July 19, 2012 (edited) Tātad ir klase: class manaKlase { public $data; public function __construct(){ ... $statement = $pdo->prepare("SELECT * FROM `table`"); $statement->execute(); $this->data = ($statement->rowCount() != 0) ? $statement->fetchAll(PDO::FETCH_ASSOC) : null; } } $manaKlase = new manaKlase(); Izveidojot objektu, ir pieejams publisks masīvs $manaKlase->data, kas satur no datubāzes atlasītos datus! Vai ir iespējams paveikt tā, lai no šī masīva varētu nolasīt vērtības, taču nebūtu iespējams tās mainīt ārpus klases, piemēram: // Nolasām echo $manaKlase->data[0]["field"]; // Nenostrādā $manaKlase->data[0]["field"] = "cita vērtība"; Paldies! Edited July 19, 2012 by ArnisR Quote Link to comment Share on other sites More sharing options...
y2ok Posted July 19, 2012 Report Share Posted July 19, 2012 Ja pareizi sapratu tad public $data; samainot uz private $data; vajadzētu paveikt to, ko tu vēlies. Quote Link to comment Share on other sites More sharing options...
draugz Posted July 19, 2012 Report Share Posted July 19, 2012 Idejiski var, praksē varētu būt pagrūti :) bet meklē ORM virzienā, faktiski uzliekot visas entīttijas vērtības kā private un pēc tam katrai vajadzīgai uztaisot get metodes. Quote Link to comment Share on other sites More sharing options...
briedis Posted July 19, 2012 Report Share Posted July 19, 2012 Sataisam klasei array accessu un varēsi pa tiešo piekļūt datiem - $manaKlase['blabla'] http://php.net/manual/en/class.arrayaccess.php Quote Link to comment Share on other sites More sharing options...
codez Posted July 19, 2012 Report Share Posted July 19, 2012 (edited) Var uzlikt klasei getteri ar __get, tad var vērtību nolasīt, bet nevar izmainīt. http://codepad.org/K5EePEAv class Test{ private $data; function init(){ $this->data['a']=5; } function __get($k){ if ($k=='data') return $this->data; } function changeFromInside(){ $this->data['a']=6; } } $test = new Test(); $test->init(); var_dump($test); var_dump($test->data['a']); $test->changeFromInside(); var_dump($test); $test->data['a']=7; var_dump($test); Edited July 19, 2012 by codez Quote Link to comment Share on other sites More sharing options...
larvae Posted July 19, 2012 Report Share Posted July 19, 2012 /* public, jo atgriezh kopiju - klases dati netiek samaitaati */ public function getRow($number) { return isset($this->data[$number]) ? $this->data[$number] : null; } public function getCellValue($rowNumber, $column) { /* parbaudam vai parametri valiidi, jo php nav strong typed */ if ($row = $this->getRow($rowNumber)) { return isset($row[$column]) ? $row[$column] : null; } return null; } Vajadzētu ņem vērā lietas: * __get() metode jās prātu - prasīsi it kā neesošus klases propertijus, bet reāli nezini, kas notiks, ja uzsetosi, ja nav iekš __set() atrunāts, arī autocomplete neredzēs. * visu to selekta rezultātu kopēt (return $this->data) nav prāta darbs, jo masīvi masīvi aizkakā atmiņu - tukšs elements jau 144 baiti. Attēlošanai vēlams uz templeitu padot pašu resultu un tad pa šamo iterēties. ColdFusionā šī lieta eleganti notiek, piemēram. * Ja nedari šo paša izglītošanās pēc vai negribi čakarēties, paņem ActiveRecord un miers mājās - kodēsies ātri, strādās lēni un netīri, bet gana labi tipveida lapām vai intranetiem. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.