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 tip de <input> creaza o paleta de culori pentru selectare culoare?
type="text" type="color" type="date"
<input type="color" name="get_color" />
Care metoda CSS roteste elementul HTML la un anumit numar de grade?
scale() translate() rotate()
#some_id:hover {
  transform: rotate(60deg);
  -ms-transform: rotate(60deg);    /* IE 9 */
  -moz-transform: rotate(60deg);   /* Firefox */
}
Click pe functia care returneaza numarul cel mai mare.
pow() min() max()
var maxn = Math.max(8, 4, 88, 56);
alert(maxn);      // 88
Ce functie previne ca un fisier sa fie inclus mai mult de o data intr-o pagina?
include() include_once() require()
include_once("un_fisier.php");
Care este traducerea corecta pentru: "Ahead of time"?
Peste timp La timp Inainte de vreme
Most people arrived ahead of time.
- Cei mai multi oameni au sosit inainte de vreme (prea devreme).
Indicati traducerea corecta a cuvantului "buenĂ­simo"
mai bun mai putin bun extrem de bun
Este fruto es buenĂ­simo.
- Acest fruct este extrem /nemaipomenit de bun.
Inlantuire mai multe metode in PHP OOP

Last accessed pages

  1. OOP - Clase abstract si interface (4307)
  2. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (272957)
  3. Creare si editare pagini HTML (85384)
  4. Verbe neregulate (5381)
  5. Verbe modale - Modal verbs - CAN, COULD, MAY, MIGHT, MUST (67225)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (443)
  2. Gramatica limbii engleze - Prezentare Generala (278)
  3. Coduri pt culori (242)
  4. Cursuri limba engleza gratuite si lectii online (186)
  5. Exercitii engleza - English Tests and exercises - Grammar (171)