Treci la conținutul principal

Ce este

Șablonul Prototype creează obiecte noi prin clonarea unuia existent, în loc să le construiască de la zero. Pregătești un obiect ca șablon, apoi îl copiezi cu cuvântul-cheie clone din PHP și schimbi doar ce diferă.

Lucrul care trebuie înțeles corect: un clone simplu copiază proprietățile cu valori, dar obiectele din interior sunt partajate, nu copiate. O metodă __clone() le copiază din nou, astfel încât clona devine într-adevăr independentă.


Exemplu: un șablon de document

Șablonul poartă părțile pe care le repetă fiecare document. clone îl copiază — iar __clone() copiază din nou obiectul TagList din interior — așa că editarea copiei lasă șablonul neatins.

Clonează, apoi schimbă diferența

Raportul a primit un titlu nou și o etichetă suplimentară, iar șablonul are în continuare doar [draft] — pentru că __clone() a copiat lista de etichete în loc să o partajeze.

Prompt
Scrie un script PHP cu o clasă Document (title, footer și un obiect TagList care conține un tablou tags) și o metodă __clone care clonează și obiectul TagList, astfel încât un document clonat să fie complet independent. Clonează un șablon într-un raport, schimbă titlul raportului și adaugă o etichetă, apoi afișează-le pe amândouă pentru a arăta că șablonul nu a fost afectat.
Ieșire: script PHP

Când să îl folosești

Folosește-l atunci când obiectele noi sunt în mare parte copii ale unuia deja pregătit — documente dintr-un șablon, entități de joc dintr-un generator, date de test dintr-un fixture.

Renunță la el atunci când obiectele se construiesc ieftin de la zero sau nu conțin nimic partajat. Pentru un obiect format din valori simple — șiruri de caractere, numere, tablouri — simplul clone din PHP este deja o copie completă, fără să fie nevoie de __clone().


Avantaje și dezavantaje

Avantaje: creare ieftină a obiectelor preconfigurate; șablonul documentează valorile implicite; nu se repetă codul de configurare.

Dezavantaje: copierea în adâncime se poate greși ușor și subtil — o proprietate-obiect uitată leagă în liniște clona de original; cu timpul, clonele se depărtează de șablon fără să se observe.