Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/03/2012, 12:18
loogys
 
Fecha de Ingreso: marzo-2012
Mensajes: 9
Antigüedad: 12 años, 9 meses
Puntos: 0
Dudas con interfaces

Hola, soy autodidacta en programación y ahora tengo un par de semanas con POO y PHP5, entiendo las diferencias entre una clase abstracta y una interfaz, haciendo algunos pininos me he topado con lo siguiente:

Esta bien echo el sieguiente ejemplo?:

index.php
Código PHP:
<?php

require_once 'managerdb.php';
require_once 
'conectordb.php';

class 
index
{
    public function 
run()
    {
        
$conx = new conectordb();
        
$conx->insert();
        
$q = new managerdb();
        
        
$q->testQuery($conx);
    }
}

$test = new index();
$test->run();
conectordb.php
Código PHP:
<?php

require_once 'interfacedb.php';

class 
conectordb implements interfacedb
{
    const 
USUARIO 'root';
    const 
PASS '';
    const 
SERVIDOR 'localhost';
    const 
DB 'dairyevents';
    
    private 
$_conexion;
    
    public function 
conect()
    {
        
$this->_conexion mysql_connect(self::SERVIDOR,self::USUARIO,self::PASS);
        
mysql_select_db(self::DB,$this->_conexion);
    }
    public function 
insert()
    {
        return 
"SELECT * FROM animales";
    }
    public function 
close()
    {
        
mysql_close($this->_conexion);
    }
}
interfacedb.php

Código PHP:
<?php

interface interfacedb
{
    public function 
insert();
    public function 
conect();
    public function 
close();
}

managerdb.php
Código PHP:
<?php

class managerdb
{
    public function 
testQuery(interfacedb $manager)
    {
        echo 
$manager->insert();
    }
}

El script funciona... pero....

En managerdb.php no hago un require_once de la interface y en el metodo testQuery solo recibo "cualquier cosa" y funciona siempre y cuando tenga el metodo insert()... ahi entiendo que debo usar el type hinting y haciendolo tambien funciona sin problemas mi duda es si lo que estoy haciendo está bien implementado el ejemplo que les expongo (usando type hinting)...

La otro duda es: Supongamos que voy a escribir una clase que se conectará a una base de datos MySQL, ahi mismo tengo su constructor y 3 metodos (insert, delete,update y select) y ademas la heredo a otra clase por el siemple echo de usar el select y mostrar los resultados... eso estaria mal verdad?... tendria que usar una interfaz cierto?.... yo lo veo asi:

"La herencia es para "heredar" propiedades y la interfaz para hacer uso de metodos que hacen diferentes cosas"

estoy bien?... voy por buen camino ???

Gracias...

P.D si alguien tiene algunos ejemplos sobre interfaces y me los quiera proporcionar muchas gracias...