Codeigniter i $CI =& get_instance()

Codeigniter i $CI =& get_instance()

offline
  • Code Developer
  • Pridružio: 23 Okt 2011
  • Poruke: 163

Zapravo, cemu sluzi taj super objekat, zasto bih ga uopste koristio? Znam da kada se instancira da zamenjuje pokazivac $this, ali mi nije najjasnije zasto bih ga uopste koristio, da li samo kada zelim podatke u obliku objekta ili ?
Ako neko moze da mi pojasni taj deo, bio bih mu zahvalan...



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1630
  • Gde živiš: Pancevo

Eo npr pravis svoju biblioteku u app/libs

Zove se My_Login.php


U login klasi hoces da proveravas dali je korisnik registrovan ili nije. E sada, zasto bi ti pisao novu klasu za konekciju sa bazom kada vec mozes koristiti CI Database....
I zasto bi ti morao da Extendujes DB (a kod CI nemozes)....

Zato se goristi getInstance => singleton pattern poznat u php-u...

To se u vecini slucajeva poziva u konstruktoru:

class My_Login {        public function __constructor() {              // initialize ci core                $CI =& getInstance();  // preuzima ih po referenci                // u obicnom kontroleru koristis $this i instanciras libs koji ti treba               // $this->load->library('database') <--- samo za kontrolere               // U ovo slucaju koristis direktan pristup u ci core               // Referencom preuzimas sve umesto this ide referenca $CI                $CI->load->library('database');                // Npr view ili dispach bi u kontroler pozvao               // $this->load->view('blabla', $this->data);                 $CI->load->view('blabla', $this->data);        } }

Da ne balavim vise zbunicu te... Matori to koristis samo ako hoces da pozoves postojecu CI biblioteku u svoju neku kasu (ne u kontroler == klasu)...

I to je to...

Citat:Zapravo, cemu sluzi taj super objekat

Super objekat hmm. Aj malo slika iz realnog zivota :

Zamisli Lokomotivu koja vuce 20 vagona. Bez lokomotive ti vagoni su nepokretni i sami rade odvojeno onaj povez koji spaja vagon 1 i vagon 2 to je npr u php Extends. E sada da bi to sve radilo zajedno kao jedan i da bi se to pokretalo potreban je super objekat koji ce da povuce sve te vagone a to je lokomotiva u ovom slucaju BaseController koji povlaci sve core klase db, loging, string, error itd. sve su to vagoni...

Primer iz zivota:
class BaseController {         public function __constructor() {       // Assign all the class objects that were instantiated by the       // bootstrap file (CodeIgniter.php) to local class variables       // so that CI can run as one big super object.       foreach (is_loaded() as $var => $class)       {          $this->$var =& load_class($class);       }             /// E to ti je super objekat. Svaki kontroler nasledjuje ci kontroler a ci kontroler nasledjuje baseController.  Zato ti mozes u svakom kontroleru da pozoves svaku biblioteku sa [b]$this -> [klasa] -> [finkcija][/b] // $this->load->view         } }
Ako nemas iskustva u OOP onda batali samo ces sebe da zbunis i nista neces da uradis!!!

Ziveli



offline
  • Code Developer
  • Pridružio: 23 Okt 2011
  • Poruke: 163

Hvala mnogo na odgovoru, sada mi je mnogo jasnije. Korisio sam i ranije super objekat, ali nikad nisam znao pravi razlog i svrhu njegovog postojanja.

function get_menu ($array, $child = FALSE) {     $CI =& get_instance();     $str = '';         if (count($array)) {         $str .= $child == FALSE ? '<ul class="nav">' . PHP_EOL : '<ul class="dropdown-menu">' . PHP_EOL;                 foreach ($array as $item) {                         $active = $CI->uri->segment(1) == $item['slug'] ? TRUE : FALSE;             if (isset($item['children']) && count($item['children'])) {                 $str .= $active ? '<li class="dropdown active">' : '<li class="dropdown">';                 $str .= '<a  class="dropdown-toggle" data-toggle="dropdown" href="' . site_url(e($item['slug'])) . '">' . e($item['title']);                 $str .= '<b class="caret"></b></a>' . PHP_EOL;                 $str .= get_menu($item['children'], TRUE);             }             else {                 $str .= $active ? '<li class="active">' : '<li>';                 $str .= '<a href="' . site_url($item['slug']) . '">' . e($item['title']) . '</a>';             }             $str .= '</li>' . PHP_EOL;         }                 $str .= '</ul>' . PHP_EOL;     }         return $str; }

Koristio sam ga kad sam pisao tu funkciju. Uglavnom, koristio sam ga samo kada ja trebam da pisem svoj helper i biblioteku, ni u jednoj vise situaciji.

Ko je trenutno na forumu
 

Ukupno su 1091 korisnika na forumu :: 35 registrovanih, 4 sakrivenih i 1052 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: anbeast, Apok, Ben Roj, bladesu, Boris BM, Darko8, debeli, draganca, FileFinder, galerija, GandorCC, Georgius, HrcAk47, krkalon, ladro, lord sir giga, Marex, milos.cbr, milutin134, Miskohd, muaddib, nenad81, ozzy, Pohovani_00, RJ, Srle993, tubular, vandrej, vathra, vukdra, yrraf, ZetaMan, zixmix, |_MeD_|, žeks62