Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Por qué no me funciona este código tan sencillo?

Estas en el tema de Por qué no me funciona este código tan sencillo? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Es un simple ejercicio de creación de un objeto a partir de una clase usando el constructor __construct() para inicializar el objeto. Después intento mostrar ...
  #1 (permalink)  
Antiguo 28/09/2005, 04:59
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años
Puntos: 3
Pregunta Por qué no me funciona este código tan sencillo?

Es un simple ejercicio de creación de un objeto a partir de una clase usando el constructor __construct() para inicializar el objeto. Después intento mostrar en pantalla sus datos (propiedades), tanto desde fuera de la clase como usando un método que los muestra.

También como añadido, clono el objeto, habiendo creado la función especial __clone para que junto a la copia se ejecuten las acciones de esta función.

Bien, pues lo que parece una tontería no me sale bien. Al ejecutarlo, el navegador se queda en blanco. No hace nada.

Alguien me puede ayudar por favor?

Este es el código:
Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Construct y Clone</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php 
class Perfil {
    
// Propiedades:
    
public $nombre "nombre1";
    public 
$apellidos "apellidos1";
    public 
$edad 0;
    
    
// Métodos:
    
function __construct($nom$apel$edad) { // Constructor para inicializar propiedades
        
$this->nombre $nom;
        
$this->apellidos $apel;
        
$this->edad $edad;
    }
    
    function 
__get($nom) { // Uso de __get() para devolver valores (más políticamente
                            // correcto que si no se usa)
        
return $this->$nom
    
}
    
    function 
__clone() { // Uso específico de la función __clone() para ejecutar 
                        // las sgtes acciones al realizar una copia:
        
echo "<p>Se ha hecho una copia del objeto.\n";
        echo 
"<p>Nombre: ".$this->nombre."<br />\n";
        echo 
"Apellidos: ".$this->apellidos."<br />\n";
        echo 
"Edad: ".$this->edad."<br />\n";
    }
    
    public function 
mostrarDatos() { // Método que muestra las propiedades
        
echo "<p>Nombre: ".$this->nombre."<br />\n";
        echo 
"Apellidos: ".$this->apellidos."<br />\n";
        echo 
"Edad: ".$this->edad."<br />\n";
    }
}

// Crear instancia de la clase Perfil:
$miPerfil = new Perfil("Manolo""Redondo"25);

// Mostrar propiedades del objeto $miPerfil sin usar método:
echo "<p>Nombre: ".$miPerfil->nombre."<br />\n";
echo 
"Apellidos: ".$miPerfil->apellidos."<br />\n";
echo 
"Edad: ".$miPerfil->edad."<br />\n";

// Mostrar propiedades del objeto $miPerfil usando método específico:
$miPerfil->mostrarDatos();

// Clonar el objeto. Al usar el método __clone() se ejecutan sus acciones al mismo
// tiempo que hago la copia:
$miOtroPerfil = clone $miPerfil;
?>
</body>
</html>
  #2 (permalink)  
Antiguo 28/09/2005, 07:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero que versión de PHP usas para ejecutar ese código? .. Recuerda que hay diferencias en la OOP de PHP 4 vs a 5 ..

Un saludo,
  #3 (permalink)  
Antiguo 28/09/2005, 08:18
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años
Puntos: 3
Uso la versión de PHP 5.0.0

En teoría debería funcionar.
  #4 (permalink)  
Antiguo 28/09/2005, 08:31
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años
Puntos: 3
Por si sirve, pongo toda la lista de módulos predeterminados del php.ini de PHP 5 para que se vea qué módulos cargo, por si es que necesito quitarle el punto y coma a alguno más:


;extension=php_bz2.dll
;extension=php_cpdf.dll
;extension=php_curl.dll
;extension=php_dba.dll
;extension=php_dbase.dll
;extension=php_dbx.dll
;extension=php_exif.dll
;extension=php_fdf.dll
;extension=php_filepro.dll
extension=php_gd2.dll
;extension=php_gettext.dll
;extension=php_iconv.dll
;extension=php_ifx.dll
;extension=php_iisfunc.dll
extension=php_imap.dll
;extension=php_interbase.dll
;extension=php_java.dll
;extension=php_ldap.dll
;extension=php_mbstring.dll
;extension=php_mcrypt.dll
;extension=php_mhash.dll
;extension=php_mime_magic.dll
;extension=php_ming.dll
;extension=php_mssql.dll
;extension=php_msql.dll
extension=php_mysql.dll
extension=php_mysqli.dll
;extension=php_oci8.dll
;extension=php_openssl.dll
;extension=php_oracle.dll
extension=php_pdf.dll
;extension=php_pgsql.dll
;extension=php_shmop.dll
;extension=php_snmp.dll
;extension=php_sockets.dll
;extension=php_sybase_ct.dll
;extension=php_tidy.dll
;extension=php_w32api.dll
;extension=php_xmlrpc.dll
;extension=php_xsl.dll
;extension=php_yaz.dll
;extension=php_zip.dll
  #5 (permalink)  
Antiguo 28/09/2005, 09:13
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años
Puntos: 3
Ya está claro! Primero no me salía nada en pantalla porque al reinstalar PHP a la versión 5, la opción de mostrar errores en pantalla estaba a Off. Lo he puesto de nuevo a On y el error que me daba era de lo más tonto: Me faltaba el punto y coma en la instrucción return:

function __get($nom) {
return $this->$nom;
}

Pues menudo fastidio, porque en el resto de lenguajes que conozco, no hace falta poner punto y coma en la última línea de código de un bloque de código o de una función. En ActionScript por ejemplo no daría error, y en JavaScript ni siquiera es necesario el ';' al final de ninguna línea de código (el retorno de carro ya marca el final). Ojalá todos se pusieran de acuerdo, joder ya! jejejej
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:53.