[ Milan M. Radovic @ 24.02.2011. 17:56 ] @
Nece da mi vidi globalne promenjive u klasi
class User
Citat:
{
public $logged,$id,$username,$password,$email,$active,$registration_date_time,$last_login_date_time,$banned;
public $db;

public function User($username=NULL,$password=NULL,$crypt=FALSE)(DA/NE)
{
//UZIMA SE GLOBALNA PROMENJIVA BAZE I LOKALNA PROMENJIVA SE PREUSMERAVA NA ADRESU GLOBALNE PROMENJIVE
global $db;

...


Probao sam i sa $GLOBALS... nop...
[ mitke013 @ 24.02.2011. 19:58 ] @
Citat:
Milan M. Radovic: Nece da mi vidi globalne promenjive u klasi
class User

Probao sam i sa $GLOBALS... nop...


Zasto uopste i radis sa globals?
[ Miroslav Ćurčić @ 24.02.2011. 20:35 ] @
Tamo gde si napisao "public $db;" ti uopšte nisi definisao globalnu promenljivu nego lokalnu-objektnu promenljivu, tako da unutar metoda s onim "global $db;" ne pronalaziš ništa.
[ Milan M. Radovic @ 25.02.2011. 09:17 ] @
aha.. Uspeo sam... problem je bio krajnje idiotski na kraju - promenjiva je u sesiji bila pa je zbog toga pravila problem... ima tu malo tripova boz' sacuvaj i sakloni :)

Pa moja klasa Database se koristi u svim klasama... ili bar vecini, pa moram nekako da je ubacim u klasu...
[ ManInTheBox @ 25.02.2011. 12:05 ] @
Citat:
Milan M. Radovic: Pa moja klasa Database se koristi u svim klasama... ili bar vecini, pa moram nekako da je ubacim u klasu...


pa ne treba ti globalna promenljiva za tako nesto... u OOP-u ne bi trebao da koristis globalne promenljive...
Code (php):

<?php
    require_once 'Database.php';
   
    class User {
         // Gledaj da polja klase cuvas privatna a po potrebi napravis getter-e i setter-e
         private $logged,$id,$username,$password,$email,$active,$registration_date_time,$last_login_date_time,$banned;
         private $db;

         public function __construct($username=NULL,$password=NULL,$crypt=FALSE) {
             $this->db = Database::getInstance();  // evo ti konekcija na bazu
             $this->db->method(); // radi nesto sa tom bazom
         }
?>
 
[ Milan M. Radovic @ 28.02.2011. 17:53 ] @
Aaaaaaaaaaaaaa :D jao kako je to extra :) Znao sam da mogu nekako da uzmem instancu da koristim, ali nisam znao kako!
[ mitke013 @ 01.03.2011. 04:06 ] @
Citat:
Milan M. Radovic: Aaaaaaaaaaaaaa jao kako je to extra Znao sam da mogu nekako da uzmem instancu da koristim, ali nisam znao kako!


Evo ti i primer za svaki slucaj:
Code (php):

protected static $instance = null ;
/**
* Allow only one instance
*
* @return Sorter
*/

public static function getInstance()
{
     if ( !self::$instance )
          self::$instance = new Sorter() ;
     return self::$instance ;
}
 
[ Milan M. Radovic @ 01.03.2011. 18:25 ] @
Ja objekat imam napravljen na globalnom nivou. Ovim samo pravim objekat u objektu? why?

UPDATE : Uspeo.... mada mi se ne svidja bas sistem... ali radi posao :)

[Ovu poruku je menjao Milan M. Radovic dana 01.03.2011. u 19:38 GMT+1]
[ mitke013 @ 01.03.2011. 19:49 ] @
Citat:
Milan M. Radovic: Ja objekat imam napravljen na globalnom nivou. Ovim samo pravim objekat u objektu? why?


Koriscenje global-a je ubedljivo najgora stvar koju neki programer moze da uradi.
Citat:

UPDATE : Uspeo.... mada mi se ne svidja bas sistem... ali radi posao


Raditi uvek sa jednom instancom 'necega' je odlicna stvar i tek kroz praksu ces videti zasto. U tvom konkretnom slucaju:

Code (php):

protected static $instance = null ;
/**
* Allow only one instance
*
* @return Database
*/

public static function getInstance()
{
     if ( !self::$instance ){
          $database = new Database() ;
          $database->connect() ;
          .... itd...
          self::$instance = $database ;
     }
     return self::$instance ;
}
 


Jel sad vidis prakticnu vrednost, mada je ovo banalan primer? U tvom programu ces uvek pozivati Database::getInstance() a ta metoda se brine o tome da napravi konekciju prvi put, sacuva nesto ako joj kasnije treba... itd..

Bolji primer je klasa Settings gde bi cuvao stvari poput broj rezultata kod paginacije, da li sajt online/offline (1/0) itd. Pogledaj sliku, to je iz pravog programa koji sad radim. Klasa snima svoje vrednosti u .ini fajl. Kad uradim Setting::getInstance()->getContestCreationFee() ; metoda getInstance() se prvo pobrine da ucita .ini fajl, parsira ga i od tada pa nadalje radim sa necim sto je vec ucitano i parsirano.

[ Milan M. Radovic @ 02.03.2011. 08:37 ] @
yap :) thanks :p