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
Care tag afiseaza textul oblic?
<strong> <pre> <em>
<p>Cursuri, Jocuri, Anime: <em>www.MarPlo.net</em></p>
Care proprietate CSS defineste spatiul dintre continutul elementului si bordura lui?
margin padding position
h3 {
  padding: 2px 0.2em;
}
Clic pe metoda ce returneaza primul element indicat de selectorii specificati.
getElementsByName() querySelector() querySelectorAll()
// preia primul Div cu class="cls", si afiseaza continutul
var elm = document.querySelector("div.cls");
alert(elm.innerHTML);
Indicati variabila PHP ce contine datele din formular trimise cu method="post".
$_SESSION $_GET $_POST
if(isset($_POST["field"])) {
  echo $_POST["field"];
}
Indicati pronumele corespunzator celui din paranteza in propozitia: "(Noi) speak english".
I They We
We speak english.
- Noi vorbim engleza.
Indicati pronumele corespunzator celui din paranteza in propozitia: "(Noi) hablamos español".
Ellos Vosotros Nosotros
Nosotros hablamos español.
- Noi vorbim spaniola.
Inlantuire mai multe metode in PHP OOP

Last accessed pages

  1. Gramatica limbii engleze - Prezentare Generala (37653)
  2. Substantivul din limba engleza - The Noun (9077)
  3. Curs si Tutoriale JavaScript (4496)
  4. Functii predefinite si Coduri PHP (338)
  5. Titluri, Paragrafe, Un nou rand, Linie orizontala (5816)

Popular pages this month

  1. Gramatica limbii engleze - Prezentare Generala (1965)
  2. Creare si editare pagini HTML (1112)
  3. Cursuri si Tutoriale: Spaniola, Engleza, HTML, CSS, Php-Mysql, JavaScript, Ajax (1043)
  4. Curs HTML gratuit Tutoriale HTML5 (949)
  5. Coduri pt culori (784)