Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Frameworks y PHP orientado a objetos (http://www.forosdelweb.com/f68/)
-   -   problema con una funcion dentro de una clase (http://www.forosdelweb.com/f68/problema-con-funcion-dentro-clase-296351/)

hormiga12 09/05/2005 10:22

problema con una funcion dentro de una clase
 
Deseo crear una función que me examine los datos de un array, si este cumple las condiciones impuestas que el programa continué, en caso contrario generara una excepción y mostrara por pantalla un mensaje de alerta. Podrían examinar el código y ver donde me estoy equivocando. Gracias.

<?php
class Usuarios
{
private $_usuario = array ('nombre' => null ,'nick' => null);
function __get ($CaracteristicasUsuario)
{
if (!array_key_exists($CaracteristicasUsuario, $this->_usuario))
throw new Exception ('dato incorrecto');
if (method_exists($this, 'get' . $CaracteristicasUsuario))
{
return call_user_func(array($this, 'get' . $CaracteristicasUsuario));
}
else
{
return $this->_usuario[$CaracteristicasUsuario];
}
}
function __set($CaracteristicasUsuario, $value)
{
if (!array_key_exists($CaracteristicasUsuario, $this->_usuario))
throw new Exception ('dato incorrecto');
if (method_exists($this, 'set' . $CaracteristicasUsuario))
{
return call_user_func(array($this, 'set' . $CaracteristicasUsuario),$value);
}
else
{
return $this->_usuario[$CaracteristicasUsuario] = $value;
}
}
///////////////////////////////////////////////////////////////////////
///////////el problema esta aqui///////////////////////////////////
/////////////////////////////////////////////////////////////////////
function setVerificarDatos($a)
{
if(strlen($a) < 2)
{
throw new Exception ("dato incorrecto");
}
$this->_usuarios['nombre'] = $a;
}
function EscribirDatos()
{
print " Mi nombre es $this->nombre. Y mi nick es $this->nick ";
}
}
?>

<?php
require_once('class.Usuario.php');
$obj = new Usuarios ();
$obj->nombre = 'perro';
$obj->nick = 'gato';
$obj->EscribirDatos();

?>

jpinedo 10/05/2005 19:44

¿Podrías decir cuál es el error que te sale??
O ¿qué es lo que esperas que haga y qué hace en realidad??
¿En qué parte llamas al método setVerificarDatos()?

Saludos:adios:

hormiga12 11/05/2005 01:26

Quiero que examine la variable this->usuario[‘nombre’], y si esta tiene más de un número determinado de caracteres que genere una excepción.
El código no genera ningún error simplemente no hace nada

jpinedo 11/05/2005 07:42

Y repito la pregunta... ¿En qué momento llamas al método setVerificarDatos()?
Lo que yo veo ahí es que al hacer:
$obj->nombre = 'perro';
Se llamará automáticamente a la función __set() con los parámetros:
__set('nombre', 'perro')

Y dentro de esta función se hará la verificación
if (method_exists($this, 'setnombre'))

Como la línea anterior te dará false, pues no existe ningún método llamado setnombre(), entonces pasará directamente a la línea:
return $this->_usuario[$CaracteristicasUsuario] = $value;

Entonces jamás se llamó al método setVerificarDatos();

Saludos:adios:

hormiga12 11/05/2005 14:06

Si no me estoy equivocando a la función setVarificarDatos se invoca por medio de __set. Y “perro” se asigna a $_usuario[‘nombre’] por medio también de __set

jpinedo 11/05/2005 14:27

Pero en el ejemplo que has puesto no se invoca nunca a la función setVerificarDatos().
Arriba he puesto paso a paso lo que hace tu código... ¿Lo has leído?

Saludos:adios:

hormiga12 12/05/2005 06:15

Ya he entendido lo queme querías decir. Le he cambiado el nombre a la función ahora se llama setnombre y todo funciona correctamente.

Muchas gracias

jpinedo 12/05/2005 09:37

A eso me refería... qué bueno que lo entendiste y lo solucionaste.

saludos:adios:


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

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.