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.
<?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().
<?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.
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;
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()
<?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.
<?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.
$this face referire la instanta de obiect curenta, self se refera la clasa curenta.
<input type="text" name="a_name" value="val" />
h3 { font-variant: small-caps; }
var msg = "Viziteaza CoursesWeb.net"; alert(msg);
$ip = $_SERVER["REMOTE_ADDR"]; echo $ip;
He actually came on time. - De fapt, el a venit la timp.
Hoy hace buen tiempo. - Astazi e vreme frumoasa.