PHP i ::

1

PHP i ::

offline
  • Pridružio: 07 Maj 2013
  • Poruke: 33

Pozdrav, kad radim sa nekim gotovim scriptama ako je npr. nadogradnja itd... uglavnom su to sitnice jer nisam profi, ali cesto vidim npr: users::getMail($value[1]), zanima me sta znaci "::", trazio sam po mnogim php tutorijalima ali nista nisam nasao da to objasnjava...



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Software developer
  • Pridružio: 06 Sep 2005
  • Poruke: 3800
  • Gde živiš: Beograd

Namespace
klasa::metoda
[Link mogu videti samo ulogovani korisnici]



offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3760
  • Gde živiš: 127.0.0.1

Ili static metoda getMail klase user.

offline
  • Peca  Male
  • Glavni Administrator
  • Predrag Damnjanović
  • SysAdmin i programer
  • Pridružio: 17 Apr 2003
  • Poruke: 23212
  • Gde živiš: Niš

[Link mogu videti samo ulogovani korisnici]

offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

Ja volim reći: "Napredno rešenje za zbunjivanje programera" Smile

To su ti metode za klase. Kao na linkovima iznad. Napredno programiranje u klasama koje ja lično ne volim zbog komplikacije petlji ali sve češće primenjujem. Moćna je stvar ako radiš na velikim CMS sistemima jer se lako povezuje sa modulima i komponentama.

offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1630
  • Gde živiš: Pancevo

Oho hvala bogu da dodje neko ko se raspituje za OOP.
Sad cu da ti docaram kako to funkcionise.
Upitanju su staticke metode (static)

users::getMail($value[1])
Sto znaci = <class> ( :: ) <method> (<param>, <argc> )

Kod iznad koji si postavio ispod haube izgleda ovako:

Users, users je klasa koja ima imetodu getMail a ta metoda ima parametar neke vrednosti tipa array.

class Users {       public $value = array();       /*        * Constructor        */       public function __construct() {             Log::message('debug', 'Users class initialized.';      }       /*        * Get user mail        */       public static function getMail($value)  {            if(is_array($value)):                  self::$value = $value;                  foreach(self::$value  as $key => $val) :                          // Do somthing                 endForeach;           endIf;      } }

Ovo iznad je primer cisto da vidis kako to radi ispod haube, sve staticke metode se pozivaju

 Users :: getMail();

Ako nije staticka metoda imas slucajeva da se pozivaju da prvo moras da napravis instancu pa tek da pozivas metodu.

  $user = new Users() ;   $user -> getMail('userID');

Ako budes radio OOP neces mocu da miksujes u metodama $this->doSomthing sa self::$doSOmthing;.

Ako tako nesto zelis da uradis koristis Factory pattern: Evo ti primer

class Factory {          public static $userFactory = null;          public static function getUserInstance() {                  if(isset(self::static)):                          self::$userFactory = new static;                  endIf;                  return self::static;          } }

Kao output bi dobio sledece slicno Zend Frameworku ili Joomla platformi:

// Init app $application = Factory::getInstance(); //sa $application sada mozes da pristupas svim ostalim navedenim klasama tipa: $application::getDatabaseDriver()->setDriver('mysql'); // U tvom slucaju bi mogao da radis ovako: Factory::getUserInstance()->getMail('userID'); ili $application::getConfig->databaseUsername; // Sto je isto kao i Factory::getConfig->databaseUsername;

Factory je jedan jako mocan pattern.
Ako te bude bilo sta jos zanimalo za OOP javi se u svako doba cu pomoci koliko god mogu ako je upitanju OOP i ostalo sve sto je vezano za oop. Ostale kodove koji nisu oop nezelim ni da gledam.

offline
  • m4rk0  Male
  • Administrator
  • Administrator tech foruma
  • Marko Vasić
  • Gladijator - Maximus Decimus Meridius
  • Pridružio: 14 Jan 2005
  • Poruke: 15766
  • Gde živiš: Majur (Colosseum)

Pretpostavljam da se pokazivac $this-> koristi za pristupanje atributu ili operaciji unutar klase, a -> se koristi za pristupanje atributu ili operaciji izvan klase ?

offline
  • Peca  Male
  • Glavni Administrator
  • Predrag Damnjanović
  • SysAdmin i programer
  • Pridružio: 17 Apr 2003
  • Poruke: 23212
  • Gde živiš: Niš

tako je Smile

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3760
  • Gde živiš: 127.0.0.1

@m4rk0: uglavnom. Ako je metoda staticka (static function Dobro) unutar klase Oprem, onda se unutar klase pristupa sa self::Dobro(), a van klase Oprem::Dobro(). Ako nije, onda si i dalje delimicno u pravu - jer postoje private, protected i public funkcije.

Arrow Public funkcijama mozes da pristupis odakle hoces, ako imas instancu klase.
Arrow Protected funkcijama samo iz klasa koje nasledjuju klasu u kojoj je definisana, kao i iz klase gde je definisana.
Arrow Private funkcijama samo iz klase gde je definisana.

offline
  • Peca  Male
  • Glavni Administrator
  • Predrag Damnjanović
  • SysAdmin i programer
  • Pridružio: 17 Apr 2003
  • Poruke: 23212
  • Gde živiš: Niš

Napisano: 23 Maj 2013 18:52

odnosno, da preformulišem svoj odgovor.

kada je reč o kodu koji se nalazi unutar klase, u tom kodu sve iz objekta pozivaš sa this->

e sad - kad si negde van objekta, prvo kreiraš objekat sa:
$objekat = new neka_klasa();
pa onda svemu što je unutar objekta pristupaš sa:
$objekat->

za static funkcije je drugačija priča, odgovorio već Rasta Ziveli

Dopuna: 23 Maj 2013 18:58

da razjasnim za static funkcije.

prednost je što se te static funkcije mogu koristiti i bez kreiranja objekta.
unutar klase pristupaš drugim static promenljivama i funkcijama sa self::
van klase sa neka_klasa::

Ko je trenutno na forumu
 

Ukupno su 1779 korisnika na forumu :: 101 registrovanih, 11 sakrivenih i 1667 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 20624 - dana 04 Apr 2026 04:18

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 015, aleksjevt, Apok, Asparagus, Asteker, Bbbggg1979, Bo96, bojan313, bojank, bojcistv, boromir, Boskovic, carinko, Clouseau, dane007, darcaud, Dare, darkkran, Denaya, Djokislav, Djokkinen, DJUNTA, Doc, doktor097, Dolinc, Dukelander, dule10savic, dunavzed, EVIDENTICAR, g_g, geo.dule, Gitzherai, glisok, gobrad, gost321, Grebostrek, Holy Saber, ivan1973, ivanR164, ivantheilic, ivran064, jarovitt, Joint Chief, Kajzer Soze, koom0001, Kruger, kunktator, Levi, LjubisaR, LUDI, MagicniHerpes, mainstream, markolopin, Medojed, mercedesamg, Mi lao shu, micke83, Miki01, mikidragi, mikrimaus, mile.ilic75, milenko crazy north, mir, mkukoleca, Moldovan, morava_01, MrNo, neko iz mase, nenad81, neutrino, nikolapetkovic, Nobunaga, opt1, Orc, Oscar, ping15, probisic, procesor, Radoslava, rednap, repac, samocitam, samp1389, sap, Semberija, Sir Budimir, Smiljkovich, Srna, stalja, Stoilkovic, suton, tritonus, Veless, Vidlič, vladao75, Zastava, zeka013, zokizemun, Zoran1959, Zorge, 79693