El ejemplo que publicaste es la forma mala de hacer las cosas, trata de pensar en todo como un objeto, te dejo aqui un ejemplito, nada loco, pero basico de altas de personas.
Persona.php:
Código PHP:
<?php
class Persona {
private $nombre;
private $apellido;
public function __construct( $nombre = '', $apellido = '' ) {
$this->nombre = $nombre;
$this->apellido = $apellido;
}
public function setNombre($nombre) {
$this->nombre = $nombre;
}
public function getNombre() {
return $this->nombre;
}
public function setApellido($apellido) {
$this->apellido = $apellido;
}
public function getApellido() {
return $this->apellido;
}
public function escribeNombre() {
echo $this->nombre . " " . $this->apellido;
}
}
?>
AlmacenPersonas.php:
Código PHP:
<?php
class AlmacenPersonas {
private $storage = array();
private static $_instance = null;
public static function getInstance() {
if( self::$_instance == null ) {
self::$_instance = new self();
}
return self::$_instance;
}
private function __construct() {
@session_start();
if( isset( $_SESSION['personasStorage'] ) ) {
$this->storage = unserialize( $_SESSION['personasStorage'] );
}
}
public function __destruct() {
$_SESSION['personasStorage'] = serialize( $this->storage );
}
public function add( Persona $persona ) {
$this->storage[] = $persona;
}
public function getPersona( $offset ) {
if( isset( $this->storage[$offset] ) ) {
return $this->storage[$offset];
}
throw new Exception("Esta persona no existe");
}
public function getAll() {
return $this->storage;
}
}
?>
ControladorPersonas.php:
Código PHP:
<?php
class ControladorPersonas() {
private $almacen;
public function __construct() {
$this->almacen = AlmacenPersonas::getInstance();
}
public function AltaPersona( $nombre, $apellido ) {
$persona = new Persona( $nombre, $apellido );
$this->almacen->add( $persona );
}
public function regresaPersonas() {
return $this->almacen->getAll();
}
}
?>
Ahora sus implementaciones:
alta_personas.php
Código PHP:
<?php
require( 'Persona.php' );
require( 'AlmacenPersonas.php' );
require( 'ControladorPersonas.php' );
if( strtoupper( $_SERVER['HTTP_REQUEST_METHOD'] ) == 'POST' ) {
$nombre = $_POST['nombre'];
$apellido = $_POST['apellido'];
$controlador = new ControladorPersonas();
$controlador->AltaPersona( $nombre, $apellido );
$respuesta = "Gracias!";
}
?>
<html>
<head>
<title>Alta de Persona</title>
</head>
<body>
<h1>Registrar una Persona</h1>
<h2><?php echo $respuesta; ?></h2>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Nombre: <input type="text" name="nombre" value="" />
Apellido: <input type="text" name="apellido" value="" />
<input type="submit" name="submit" value="Registrar" />
</form>
</body>
</html>
ver_personas.php
Código PHP:
<?php
require( 'Persona.php' );
require( 'AlmacenPersonas.php' );
require( 'ControladorPersonas.php' );
$controlador = new ControladorPersonas();
$personas = $controlador->regresaPersonas();
?>
<html>
<head>
<title>Ver Personas</title>
</head>
<body>
<h1>Personas Registradas:</h1>
<?php foreach( $personas as $numero => $persona ) { ?>
<?php echo sprintf( "%s - %s %s", $numero, $persona->getNombre(), $persona->getApellido() ); ?>
<?php } ?>
</body>
</html>
Si te puedes dar cuenta todo esta completamente separado, la clase Persona, no sabe si las variables llegan via POST, o via XML, o desde la linea de comando, solo se encarga de guardarlas, asi como el Almacen y el Controlador, asi debes de pensar.
En Abstraccion.