 |
Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Comunitatea PHP Romania
|
| Subiectul anterior :: Subiectul următor |
| Autor |
Mesaj |
al3x
Data înscrierii: 12/Ian/2006
Mesaje: 1
|
| Trimis: Joi Ian 12, 2006 1:17 am Titlul subiectului: la ce e buna folosirea interfetelor pentru obiecte? |
|
|
ma uitam prin documentati despre clase si obiecte din php5 si am observat un capitol numit "object interface". se refera la ceva de genul:
Cod: <?php
// Declare the interface 'iTemplate'
interface iTemplate
{
public function setVariable($name, $var);
public function getHtml($template);
}
// Implement the interface
// This will work
class Template implements iTemplate
{
private $vars = array();
public function setVariable($name, $var)
{
$this->vars[$name] = $var;
}
public function getHtml($template)
{
foreach($this->vars as $name => $value) {
$template = str_replace('{' . $name . '}', $value, $template);
}
return $template;
}
}
?>
Intrebarea mea este: cu ce ne ajuta daca folosim astfel de interfete cu diverse implementari?
Nu am putea la fel de bine sa cream doua clase diferite, dar cu aceleasi metode? Pentru ca oricum doua implementari inseamna doua clase diferite care implementeaza diferit interfata data.
Va multumesc anticipat, indiferent de raspuns. |
|
| Sus |
|
aurelian
Data înscrierii: 01/Iun/2003
Mesaje: 833
Locație: Bucuresti
|
| Trimis: Joi Ian 12, 2006 9:13 am Titlul subiectului: |
|
|
pai, prin definitie (din capul meu), o interfata introduce metode si semnaturi ale acestora fara a le defini (pe metode).
O clasa care implementeaza aceasta interfata, se obliga sa accepte comportamentul acestei interfete, prin implementarea metodelor oferite.
Mai mult, o interfata iti poate aduce mai multa claritate in cod.
referitor la exemplul tau, gandeste-te ca ai implementa aceiasi interfata, unei clase XMLTemplate de exemplu, iar in acest caz, probabil ca vei schimba doar o linie de cod (sau nici una) pentru ca vei stii ca XMLTemplate iti va pune la dispozitie metodele necesare, setVar si getHTML.
cam acelasi exemplu si aici: http://svn.berlios.de/wsvn/medick/trunk/libs/action/view/Base.php?op=file&rev=0&sc=0 |
|
| Sus |
|
marghidanu
Data înscrierii: 01/Feb/2006
Mesaje: 2
Locație: Romania
|
| Trimis: Mie Feb 01, 2006 3:00 pm Titlul subiectului: |
|
|
Interfetele iti permit polimorfism. O clasa ce implementeaza o interfata trebuie sa suprascrie toate metodele din interfata respectiva.La ce e bun... poti adresa un set de clase direct dupa sablonul. Interfata te asigura ca in toate clasele care o mostenesc vei gasi acele metode definite in interfata.
Spor!!! |
|
| Sus |
|
Troto
Data înscrierii: 29/Iun/2004
Mesaje: 249
Locație: Brasov
|
| Trimis: Mar Feb 21, 2006 11:49 pm Titlul subiectului: |
|
|
| si apropos de polimorfism, aceasta este singura metoda in PHP de a-l obtine |
|
| Sus |
|
johnny
Data înscrierii: 31/Iul/2004
Mesaje: 904
Locație: Bucuresti
|
| Trimis: Mie Feb 22, 2006 11:19 pm Titlul subiectului: |
|
|
o implementare a interfetelor relevanta o gasesti in Creole, vezi:
ResultSet (care trebuie sa fie implementat pentru fiecare driver - mysql, mssql, oracle, etc...)
Exista si un workaround pentru php4, pentru aceasta functionalitate:
an style="color: #000000"><?php class InterfataPhp4
{
function functie()
{
trigger_error("Functia InterfataPhp4::functie() nu este implementata");
}
//.....
} |
|
| Sus |
|
PHPRomania Bot
Bot Member
Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google |
| Trimis: Mie Dec 26, 2007 7:01 pm Titlul subiectului: Ad |
|
|
|
|
|
| Sus |
|
| |
|