Ver Mensaje Individual
  #8 (permalink)  
Antiguo 12/03/2007, 16:49
Avatar de GatorV
GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Ejemplo como para el FAQ

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 
addPersona $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.