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 1127 korisnika na forumu :: 61 registrovanih, 7 sakrivenih i 1059 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 13297 - dana 20 Jan 2026 17:42

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 252., 4. Ozrenska, Agape, aleksmajstor, babaroga, Bane san, Belac91, blatruc82, bokicacar, crnitrn, cuculo, DmitryStrong, draganl, Dvogled, eagle.rs, galerija, Glauber, gost321, HrcAk47, icemilos, ikan, In_hero, Jakonjveliki, Jester, JK, Kajzer Soze, kreker, Kudun, kunktator, larix, lima, M74AB3, MB120mm, Mcdado, mercedesamg, milenko crazy north, milutin134, miodrag, Mldo, MRale98, naki011, Nikolajevic, niksa517, paja69, picknick, PlayerOne, powSrb, proka89, raketaš, Razdroid, S2M, sspp, Steeeefan, StrahinjicOgnjen, tomigun, TRAVUNIJA, tritonus, Tumansky, Velizar Laro, yrraf, Zoran1959