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
http://php.net/manual/en/language.namespaces.php



offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3747
  • 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: 23211
  • Gde živiš: Niš

http://php.net/manual/en/language.oop5.static.php

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: 23211
  • Gde živiš: Niš

tako je Smile

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3747
  • 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: 23211
  • 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 500 korisnika na forumu :: 4 registrovanih, 1 sakriven i 495 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: procesor, S1Mk3, sasa76, Shilok