1. Constante

Pe langa proprietati (variabile) si metode (functii), in corpul clasei pot fi definite si constante, prin cuvantul const. Sintaxa generala este:
                const NUME_CONSTANTA;
- Diferenta principala dintre constante si proprietati e faptul ca valoarea constantei ramane aceeasi, nu mai poate fi modificata.
- La constante nu se foloseste atribut (public, private, protected), doar cuvantul const, ele sunt recunoscute ca publice.
- Constantele se acceseaza prin numele clasei si operatorul doua-puncte (::) (atat in interiorul clasei cat si in script unde e creata instanta), cu formula:
                Nume_Clasa::NUME_CONSTANTA

Pentru a se distinge mai clar proprietatile de constante, se obisnueste ca numele constantelor sa fie scris cu majuscule.


Iata un exemplu de clasa cu o constanta, si cum poate fi aceasta utilizata. Clasa Test de mai jos contine o proprietate "raza", o constanta "PI", metoda constructor si o metoda "getArea()".
<?php
// Clasa Test
class Test {
  public $raza;          // Proprietate
  const PI = 3.14;       // Constanta

  // Constructor
  public function __construct($raza) {
    // Daca $raza e un numar, atribuie valoarea la proprietatea "raza"
    // Altfel, seteaza un mesaj de eroare
    if(is_numeric($raza)) $this->raza = $raza;
    else throw new Exception('Valoare incorecta pt. raza');
  }

  // Returneaza aria cercului
  public function getArea() {
    return Test::PI * pow($this->raza, 2);
  }
}
?>
- Metoda constructor verifica daca argumentul adaugat la crearea instantei este de tip numar, in caz Adevarat, atribuie acea valoare la proprietatea "raza". Altfel, returneaza eroarea definita in Exception().
- Metoda getArea() returneaza aria cercului (formula matematica este PI*Raza2).
- Pentru a testa aceasta clasa si modul de accesare a constantei, folosim urmatorul script.
<?php
echo Test::PI;        // Afiseaza valoarea constantei PI din clasa Test

// Creare Instanta la clasa Test
$objTest = new Test(78);

// Afiseaza aria cercului cu raza 78, returnata de metoda getArea()
echo '<br /> Aria = '. $objTest->getArea();
?>
- Observati cum e accesata constanta "PI", cu aceeasi formula in interiorul clasei si in script, inainte de a crea instanta la clasa. Astfel, constantele pot fi accesate si fara a crea o instanta de obiect la acea clasa.
- Rezultatul afisat de acest exemplu este:
3.14
Aria = 19103.76

Daca se incearca modificarea valorii constantei, in clasa sau in afara ei (Clasa::CONSTANTA=alta_valoare;), va genera eroare.
- In interiorul clasei, constantele pot fi accesate si prin cuvantul special self in loc de numele clasei:
                self::CONSTANTA
- In afara clasei, constantele pot fi accesate si prin intermediul instantei de obiect, dar dupa crearea ei. In exemplu de mai sus, dupa declararea instantei se poate folosi si   $objTest::PI;

2. Proprietati si metode Statice

Pe langa atributele: "public", "private" si "protected"; prin care se defineste domeniul de acces al proprietatilor si metodelor; acestea pot fi create si ca statice, astfel, vor apartine exclusiv clasei, si nu pot fi apelate prin instanta de obiect a clasei, ci direct prin ea, cu operatorul doua-puncte (::).
Pentru a defini o proprietate sau metoda ca statica, se foloseste cuvantul static inaintea atributului, cand sunt create aceste elemente. Sintaxa generala este:
                static atribut $proprietate
                static atribut function Metoda()
- atribut este unul din cuvintele: public, private sau protected; care stabilesc domeniul de existenta.
Aceste elemente statice nu pot fi apelate prin instanta de obiect deoarece nu apartin ei, ele apartin clasei si pot fi apelate cu formula:
                NumeClasa::$proprietate
                NumeClasa::metoda()
- Observati ca la proprietate, cand e statica trebuie adaugat si caracterul $ (fara caracterul '$', sintaxa "NumeClasa::proprietate" este confundata cu cea pt. constante).

• In interiorul clasei, elementele statice pot fi apelate si prin cuvantul special self in loc de numele clasei:
                self::$proprietate         sau         self::Metoda()


Iata un exemplu din care se intelege mai bine. In clasa urmatoare, denumita "elStatic" se definesc doua proprietati statice: una cu atribut "private" (site), a doua publica (id); o metoda constructor si alta statica.
<?php
// Clasa elStatic
class elStatic {
  // Definire proprietati statice
  static private $site = 'marplo.net';        // Privata
  static public $id = 78;                       // Publica

  // Constructor
  public function __construct($site) {
    // Daca parametru $site e de tip String si cel putin 4 caractere
    // Atribuie valoarea la proprietatea "site" si apeleaza metoda getProp()
    // Altfel, seteaza un mesaj de eroare
    if(is_string($site) && strlen($site)>3) {
      elStatic::$site = $site;
      self::getProp();             // Apelare prin cuvantul special  self
    }
    else throw new Exception('Valoare incorecta pt. site');
  }

  // Metoda statica
  static public function getProp() {
    // Afiseaza valoarea proprietatilor statice (folosind numele clasei, dar si cuvantul  self )
    echo '<br /> ID = '. elStatic::$id. ' - site: '. self::$site;
  }
}
?>
- Vedeti explicatiile din cod si modul de lucru, cum sunt accesate proprietatile si metoda statica.
- Deoarece elementele statice apartin direct clasei, pentru utilizarea lor nu e nevoie de crearea unei instante la aceasta clasa. Dar se pot folosi si instante, acestea determina auto-apelarea metodei constructor, dupa cum puteti vedea in scriptul urmator, care foloseste elemente din clasa "elStatic" si o instanta la ea.
<?php
echo elStatic::$id;        // Afiseaza valoarea proprietatii statice "id"
elStatic::getProp();       // Apeleaza metoda statica getProp()

elStatic::$id = 89;       // Modifica valoarea proprietatii statice "id"

// Creare Instanta la clasa elStatic
$obj = new elStatic('www.php.net');
?>
- Observati ca valoarea proprietatii statice care e publica (aici "id") poate fi schimbata in afara clasei si influenteaza dupa ea toate instructiunile in care e folosita (ca si cum ar fi modificata in clasa), inclusiv orice instanta la clasa, creata dupa modificare.
- Acest exemplu va afisa in browser urmatorul rezultat:
78
ID = 78 - site: marplo.net
ID = 89 - site: www.php.net
- Prin crearea instantei s-a obtinut rezultatul dat de metoda constructor.

• Intr-o clasa se pot folosi combinate: constante, metode si proprietati statice si generale (fara "static"), dar in corpul metodelor statice se pot utiliza doar elemente care si ele sunt statice, sau constante. Accesarea in codul dintr-o metoda statica a unei proprietati cu formula $this->proprietate genereaza eroare.

$this face referire la instanta de obiect curenta, self se refera la clasa curenta.


La pagina Functii - clase si obiecte sunt prezentate cateva functii PHP pentru Clase si Obiecte.

In lectia urmatoare e prezentata utilizarea mostenirii si clasele extinse.

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Ce tag HTML5 este indicat sa contina meniul cu link-uri de navigare in site?
<section> <nav> <article>
<nav><ul>
 <li><a href="http://coursesweb.net/css/" title="CSS Course">CSS Course</a></li>
 <li><a href="http://www.marplo.net/jocuri/" title="Flash Games">Flash Games</a></li>
</ul></nav>
Ce proprietate CSS muta elementrul in dreapta sau stanga de la locul unde e?
text-align clear float
.some_class {
  width: 30%;
  float: left;
}
Clic pe metoda obiectului Math care rotunjeste numarul x descrescator la cel mai apropiat intreg.
Math.ceil(x) Math.abs(x) Math.floor(x)
var num = 12.34567;
num = Math.floor(num);
alert(num);       // 12
Indicati functia PHP care returneaza numarul de caractere dintr-un sir.
mb_strlen() count() stristr()
$str = "sir cu caractere utf-8 åèö";
$nrchr = mb_strlen($str);
echo $nrchr;        // 29
Clic pe raspunsul potrivit la intrebarea: "When it happened?".
On the 7th of July 1996 It is a quarter to 5. Nice weather.
When it happened? On the 8th of August 2001.
- Cand s-a intamplat? Pe 8 August 2001.
Indicati raspunsul potrivit la intrebarea: "¿Cuando sucedió?".
Hace buen tiempo. En el 8 de Agosto de 2001 Son las tres menos cuarto.
¿Cuando sucedió? En el 8 de Agosto de 2001.
- Cand s-a intamplat? Pe 8 August 2001.
OOP - Constante, Proprietati si Metode Statice

Last accessed pages

  1. Coduri pt culori (1681)
  2. Zoo Amigos (943)
  3. Butterfly Kyodai (5680)
  4. Bubbles3 (8791)
  5. The Rise Of Atlantis (1521)

Popular pages this month

  1. Bubbles3 (3366)
  2. Gramatica limbii engleze - Prezentare Generala (3170)
  3. Prezentul simplu si continuu - Present Tense Simple and Continuous (2266)
  4. Butterfly Kyodai (2168)
  5. Trecutul simplu si continuu - Past Tense Simple and Continuous (1918)