Abstracci贸n de Objetos

Abstracci贸n de Objetos

PHP 5 introduce clases y m茅todos abstractos. No es permitido crear una instancia de una clase que ha sido definida como abstracta. Cualquier clase que contenga por lo menos un m茅todo abstracto debe tambi茅n ser abstracta. Los m茅todos definidos como abstractos simplemente declaran el m茅todo, no pueden definir la implementaci贸n

Cuando se hereda desde una clase abstracta, todos los metodos marcados como abstractos en la declaraci贸n de la clase padre, deben de ser definidos por la clase hijo; adicionalmente, estos metodos se deben definir con la misma o menor visibilidad. Si el m茅todo abstracto es definido como protected, la implementaci贸 de la funci贸n debe ser definida como protected o public.

Ejemplo 19-16. Ejemplos de la clase Abstract

<?php
abstract
class AbstractClass
{
    
// Force Extending class to define this method
    
abstract protected function getValue();
    
abstract protected function prefixValue($prefix);

    
// Common method
    
public function printOut() {
        print
$this->getValue() . "\n";
    }
}

class
ConcreteClass1 extends AbstractClass
{
    
protected function getValue() {
        return
"ConcreteClass1";
    }
    
    
public function prefixValues($prefix) {
        return
"{$prefix}ConcreteClass1";
    }
}

class
ConcreteClass2 extends AbstractClass
{
    
protected function getValue() {
        return
"ConcreteClass2";
    }

    
public function prefixValue($prefix) {
        return
"{$prefix}ConcreteClass2";
    }
}

$class1 = new ConcreteClass1;
$class1->printOut();
echo
$class1->prefixValue('FOO_') ."\n";

$class2 = new ConcreteClass2;
$class2->printOut();
echo
$class2->prefixValue('FOO_') ."\n";
?>

El resultado del ejemplo seria:

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2

El co贸digo anterior que no ten铆a clases definidas por el usuario o funciones llamadas 'abstractas' puede correr sin necesidad de modificaci贸n.