Hola si te sirve de algo este es mi apunte cuando empeze con poo, ejecutalo y hechale un vistazo, faltan algunas cosas, es solo lo basico:
Código PHP:
<?php
{
//La clase algo tiene dos metodos, si no llamo a las var con this, tomaria solo las que estan dentro del metodo
class Algo
{
var $x;
function setX($arg)
{
$this->x = $arg;
}
function getX()
{
return $this->x;
}
}
//La clase Otro hereda (Extends) los metodos de Algo
/* Cuando un objeto de una clase derivada es instanciado, solo su Constructor es llamado, pero no el de la clase Padre,
esto es una lástima porque el encadenamiento de constructores es una característica clásica de la POO.
Si quieres llamar al constructor de la clase base, se tiene que hacer explicitamente en el constructor de la clase derivada.
Esto funciona porque todos los metodos de la clase padre están disponibles en la clase derivada debido a la Herencia. */
class Otro extends Algo
{
var $y;
function setY($arg)
{
$this->y = $arg;
}
function getY()
{
return $this->y;
}
}
//Clase contructora, automaticamente al instanciar un objeto de esta clase se llama a la funcion Construct(arg)
//La cual automaticamente en este caso le asigna un valor a z.
//Si se indican valores en el argumento de la funcion constructora seran los valores por defecto que tendra esta
//funcion al llamarse sin argumentos: function Construct($arg="3",$y="5");
class Construct
{
var $z;
function Construct($arg)
{
$this->z = $arg;
}
function getZ()
{
return $this->z;
}
}
//Sobrecarga (EMULADA), Se llama a determinada funcion,
//dependiendo de la cantidad de argumentos que se le pase a la constructora
class MiClase
{
function MiClase()
{
$nombre="MiClase".func_num_args();
$this->$nombre();
// Notar que $this->nombre(); generalmente estaría mal
// pero aqui $nombre es un string con el nombre del
// método que se va a llamar
}
function MiClase1($x)
{
echo "<BR>Solo un argumento";
}
function MiClase2($x,$y)
{
echo "<BR>Se llamo con dos argumentos";
}
}
//Clase que dirije el flujo del programa (INDICE)
class Programa
{
var $opcion;
function SeleccionaOpcion($arg)
{
$this->opcion = $arg;
}
function MuestraOpcion()
{
switch ($this->opcion)
{
case 0:
//Flujo del programa - Instancio un nuevo objeto:
$obj = new Algo();
//Utilizo el metodo para insertar datos:
$obj->setX(10);
//Extraigo los datos de este objeto:
$resultado = $obj->getX();
echo $resultado."<BR><BR>";
break;
case 1:
//Objetos de la clase "Otra" ahora poseen todos los atributos y métodos de la clase padre (Algo)
//más sus propios métodos y atributos
$obj = new Otro();
$obj->setX(2);
$obj->setY(3);
$valor1 = $obj->getX();
$valor2 = $obj->getY();
echo $valor1 + $valor2."<BR><BR>";
break;
case 2:
//Al instanciar el objeto inicio la clase con un valor.
$obj = new Construct(6);
$valor = $obj->getZ();
echo $valor."<BR><BR>";
break;
case 3:
//Dos objetos, uno con un param otro con dos:
$obj1 = new MiClase('2');
$obj2 = new MiClase('2','3');
}
}
}
/*
--- INDICE ---
0- Instancia de un objeto, acceso a sus datos y metodos
1- Herencia
2- Constructoras
3- Sobrecarga Emulada (Da warnings)
*/
$flujo = new Programa();
$flujo->SeleccionaOpcion(1);
$flujo->MuestraOpcion();
//Serializo al objeto y limprimo
$cadena = serialize($flujo);
echo $cadena;
}
?>