Curs Php-mysql

Inlantuire cu Metoda Statica

Aceasta lectie arata cum se pot accesa mai multe metode inlantuite in PHP OOP.
Inlantuirea metodelor inseamna accesarea mai multor metode, sau functii ale unei clase, intr-o singura instructune.

$obiect->metoda_1()->metoda_2()
Cerinta prin care se pot accesa metode inlantuite este ca metoda precedenta sa returneze instanta de obiect, folosind: return $this in codul metodei precedente (metoda_1() ).

- Iata un exemplu, o clasa PHP prin care se pot calcula aria si perimetrul dreptunghiului (vedeti comentariile din cod si testati-l).
class Rectangle {
  public $x = 0;
  public $y = 0;

  // seteaza valori pentru laturile $x si $y
  public function setXY($x, $y){
    $this->x = $x;
    $this->y = $y;

    return $this;     // returneaza instanta de obiect
  }

  // returneaza aria
  public function area(){
    return $this->x * $this->y;
  }

  // returneaza perimetru
  public function perimeter(){
    return 2 * ($this->x + $this->y);
  }
}

// creaza o instanta de obiect a clasei
$obR = new Rectangle;

// afiseaza aria si perimetru
echo $obR->setXY(3, 4)->area();          // 12
echo '<br/>'. $obR->setXY(3, 4)->perimeter();       // 14

• Se pot apela mai mult de doua metode inlantuite, tehnica e aceeasi, toate metodele accesate precedent trebuie sa returneze instanta de obiect.
- Iata un exemplu de inlantuire trei metode. O clasa PHP care defineste un tag HTML, cu ID, atribut "class" si continut (studiati codul si testati-l).
class setTag {
  private $id = '';        // atributul id
  private $class = '';     // atributul class

  // seteaza $id
  public function setId($id){
    $this->id = ' id="'. $id .'"';

    return $this;     // returneaza instanta de obiect
  }

  // seteaza $class
  public function setClass($class){
    $this->class = ' class="'. $class .'"';

    return $this;     // returneaza instanta de obiect
  }

  // returneaza tag-ul HTML si continutul
  public function getTagCnt($tag, $cnt){
    return '<'. $tag .$this->id. $this->class .'>'. $cnt .'</'. $tag. '>';
  }
}

// creaza o instanta de obiect a clasei
$obTag = new setTag;

// variabile cu tipul tag-ului si continut
$tag = 'div';
$cnt = 'https://marplo.net';

// apeleaza metodele inlantuite pt. setare ID, "class", creaza un <div> cu aceste atribute si continut
echo $obTag->setId('some_id')->setClass('cls')->getTagCnt($tag, $cnt);

/* Rezultat:
 <div id="some_id" class="cls">https://marplo.net</div>
*/
Instructiunea cu metodele inlantuite din codul de mai sus:
echo $obTag->setId('some_id')->setClass('cls')->getTagCnt($tag, $cnt);
E la fel cu acest cod:
// seteaza pe rand ID-ul, "class" si afiseaza tag-ul cu continutul
$obTag->setId('some_id');
$obTag->setClass('cls');
echo $obTag->getTagCnt($tag, $cnt);

Inlantuire cu Metoda Statica

Pentru a inlantui o metoda statica trebuie ca metoda statica sa returneze instanta clasei, folosind: return new self.
In instructiunea de apelare a metodei statice se foloseste direct numele clasei.
Sintaxa:
numeClasa::metodaStatica()->altaMetoda()
- Exemplu, o clasa PHP cu o metoda statica ce seteaza valoarea la o proprietate statica privata (private nu poate fi accesat direct in afara clasei), si o metoda publica ce returneaza valoarea proprietatii private.
<?php
class clsData {
  // proprietate privata, nu poate fi accesata direct in afara clasei
  private static $data;

  // metoda statica, seteaza valoarea pt. $data
  public static function setData(){
    self::$data = 'https://marplo.net/php-mysql/';

    return new self;      // returneaza instanta clasei
  }

  // metoda ce returneaza valoarea din $data
  public function getData(){
    return self::$data;
  }
}

// acceseaza metoda getData() dupa /legat de setData()
echo clsData::setData()->getData();       // https://marplo.net/php-mysql/

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.
Inlantuire mai multe metode in PHP OOP

Last accessed pages

  1. Verbe modale - SHALL, SHOULD, OUGHT TO, WILL, WOULD, USED TO, BE TO, DARE (21220)
  2. Zilele saptamanii - Lunile anului - Anotimpurile - Engleza (15818)
  3. PHP Functii Anonime - Closures (457)
  4. Caractere speciale - Entitati HTML (6207)
  5. Curs HTML gratuit Tutoriale HTML5 (94083)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (5274)
  2. Curs HTML gratuit Tutoriale HTML5 (4344)
  3. Curs si Tutoriale JavaScript (3557)
  4. Prezentul simplu si continuu - Present Tense Simple and Continuous (3476)
  5. Curs PHP MySQL, Tutoriale si Scripturi PHP (3392)