Curs Php-mysql

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 atribut e folosit in tag-ul <img> pentru adresa imaginii?
href src rel
<img src="http://coursesweb.net/imgs/webcourses.gif" width="191" height="63" alt="Courses-Web" />
Care din aceste coduri CSS ascunde elementul in pagina?
display: none; display: inline; position: relative;
#id {
  display: none;
}
Ce instructiune opreste executia lui while() sau for() ?
continue prompt() break
for(var i = 0; i< 8; i++) {
  if(i > 1) break;
  alert(i);
}
Indicati functia utilizata pentru a crea constante.
define() include() defined()
define("CONSTANT_NAME", "value");
echo CONSTANT_NAME;
Care este forma de plural a substativului "class" (clasa)?
classes clases clasis
This school has three classes.
- Scoala asta are trei clase.
Care este pluralul substativului "voz" (voce)?
vose voze voces
Escuché dos voces.
- Am auzit doua voci.
OOP - Constante, Proprietati si Metode Statice

Last accessed pages

  1. Coduri pt culori (39345)
  2. Laravel - Arhitectura de baza (1446)
  3. Exemple de conversatii in limba engleza (3025)
  4. Adaugare buton derulare la inceputul paginii (438)
  5. Trecutul continuu - Exercitii si teste incepatori (6518)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (5360)
  2. Curs HTML gratuit Tutoriale HTML5 (4430)
  3. Curs si Tutoriale JavaScript (3619)
  4. Prezentul simplu si continuu - Present Tense Simple and Continuous (3502)
  5. Curs PHP MySQL, Tutoriale si Scripturi PHP (3463)