Inlantuire mai multe metode in PHP OOP

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 = 'http://www.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">http://www.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 = 'http://www.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();       // http://www.marplo.net/php-mysql/

Functii cu Parametri object ... <<-- Anterior --- Urmator -->> getElementById si getElementsByTagName

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care meta tag se foloseste pentru scurta descriere a paginii?
<meta content="..."> <meta description="..."> <meta http-equiv="...">
<meta name="description" content="70-160 caractere ce descriu continutul paginii" />
Ce proprietate CSS opreste efectul dat de "float"?
clear text-align position
#some_id {
  clear: both;
}
Clic pe metoda ce creaza un array cu toate elementele din pagina cu un anumit nume de tag.
getElementsByName() getElementById() getElementsByTagName()
var divs = document.getElementsByTagName("div");
var nr_divs = divs.length;
alert(nr_divs);
Indicati functia PHP ce returneaza numarul de elemente dintr-un array.
is_array() count() strlen()
$arr = array(7, 8, "abc", 10);
$nri = count($arr);
echo $nri;        // 4
Indicati adverbul corespunzator adjectivului din paranteza in propozitia: "I live (happy)".
happly happily hapily
I live happily.
- Traiesc fericit (in mod fericit).
Indicati adverbul corespunzator adjectivului din paranteza in propozitia: "Vivo (feliz)".
felizamente felizmente felices
Vivo felizmente.
- Traiesc fericit (cu fericire).
Inlantuire mai multe metode in PHP OOP - Tutorial PHP