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 poate fi utilizat pentru a adauga stiluri CSS direct in tag-ul HTML?
type style class
<div style="width: 80%; border: 3px solid #888888;">Continut</div>
Care din metodele proprietatii CSS transform distorsioneaza elementul HTML la un anumit unghi (inclusiv continutul lui)?
translate() scale() skew()
#un_id {
  transform: skew(20deg, 25deg);
  -ms-transform: skew(20deg, 25deg);   /* IE 9 */
  -webkit-transform: skew(20deg, 25deg);   /* Safari and Chrome */
}
Clic pe functia care poate converti un obiect Date in Sir.
indexOf() toString() getDate()
var rightnow = new Date();
alert( rightnow.toString() );
Care functie aplica o alta functie la elementele unui array?
array_merge() array_search() array_map()
$arr = arra("abc", "<p>xyz</p>", "<em>PHP</em>");
// aplica functia strip_tags() ca sa stearga tag-urile HTML din fiecare element din %arr
$arr = array_map("strip_tags", $arr);
}
Cum se spune "sambata" in limba engleza?
Sunday Saturday Monday
On Saturday I visit my grandparents.
- Sambata imi vizitez bunicii.
Cum se spune "sambata" in limba spaniola?
domingo lunes sábado
Sábado visito mis abuelos.
- Sambata imi vizitez bunicii.
Inlantuire mai multe metode in PHP OOP

Last accessed pages

  1. Gramatica limbii engleze - Prezentare Generala (61836)
  2. Creare si editare pagini HTML (18458)
  3. Adjectivul in limba engleza - The adjective (6731)
  4. Trecutul simplu si continuu - Past Tense Simple and Continuous (22366)
  5. Gradele de comparatie: comparative, superlative (10924)

Popular pages this month

  1. Gramatica limbii engleze - Prezentare Generala (1613)
  2. Prezentul simplu si continuu - Present Tense Simple and Continuous (985)
  3. Cursuri si Tutoriale: Spaniola, Engleza, HTML, CSS, Php-Mysql, JavaScript, Ajax (758)
  4. Trecutul simplu si continuu - Past Tense Simple and Continuous (737)
  5. Prezent perfect si Prezent perfect continuu - Present perfect and Continuous (715)