Re: [PHP-ES] Funcion en Clase PHP

[email protected] (Carlos Medina)
Newsgroups php.general.es
Organization SimplyNetworks
Message-ID <[email protected]>
Am 02.08.2010 16:28, schrieb Carlos Sura:
>
>
> Hola Carlos,
> Gracias por responder...
>
> Si, es que la verdad, no lo tenia bien entendido,y me puse a investigar... Entonces, te explico un poco mas:
>
> Yo tengo la clase para la conexion, y la de empledaos y que ya puse anteriormente.... Ahora tengo otra clase, que es la que implementa los descuentos, asi no tengo que leerlos directamente de la base de datos.
>
> class Procesos {
>
>      var $isss_empleado = 3;
>      var $isss_patrono = 7.5;
>      var $isss_salmax = 685.71;
>      var $afp_empleado = 6.25;
>      var $afp_patrono = 6.75;
>      var $afp_minimo = 207.6;
>      var $afp_max = 5354.52;
>
>      // constructor
>
>
>      function Procesos($isss_empleado, $isss_patrono, $isss_salmax, $afp_empleado, $afp_patrono, $afp_minimo, $afp_max) {
>          $this->isss_empelado = $isss_empleado;
>          $this->isss_patrono = $isss_patrono;
>          $this->isss_salmax = $isss_salmax;
>          $this->afp_empleado = $afp_empleado;
>          $this->afp_patrono = $afp_patrono;
>          $this->afp_minimo = $afp_minimo;
>          $this->afp_max = $afp_max;
>      }
>
>
>      // metodos get
>
>      function get_isss_empleado() {
>          return $this->isss_empleado;
>      }
>
> ................... y los demas con las variables que estan arriba -metodos get-
>
> function set_isss_empleado($v) {
>          if(!is_numeric($v)) {
>              return false;
>          } else {
>              $this->isss_empleado = $v;
>          }
>      }
>
> .............. y los demas con las variables que estan arriba -seteos-
>
>
> Me explico?... Entonces, yo imagino -doy por sentado-  que esta clase la puedo incluir en el archivo empleados.class.php  verdad??
>
> Mi unica duda es, que el salario si depende de la base de datos, ya que no es salario fijo.... Entonces, como podria hacer para que la operacion retener el valor del salario... del empleado que se ingrese al momento?... Me cuesta un poco esa cuestion de logica...
>
> Y gracias no habia tomado en cuenta lo de las inyecciones sql... En este momento ya lo estoy modificando.
>
>
> Carlos Sura.
>
>
>
>
>
>> To: [email protected]
>> Date: Mon, 2 Aug 2010 13:04:25 +0200
>> From: [email protected]
>> Subject: Re: [PHP-ES] Funcion en Clase PHP
>>
>> Hola Carlos,
>> que quieres hacer? me imagino por lo que estas escribiendo que deseas
>> una ayuda en como formar declarar un metodo en la clase existente y que
>> funcione. Si es eso lo que deseas pues necesitas meter en la classe tu
>> funcion:
>>
>> // me imagino que esta es la clase empleados...
>> class empleados{
>>
>> // aqui vendrian los otros metodos de la clase
>> // me imagino que estas usando PHP4 si no escribe porque la cosa cambia
>>           /*
>>            * Funcion afp que hace esto y aquello
>>            * @param Array array de opciones para el metodo
>>            */
>> 	function afp( $patrono,$empleado,$salario,$max,$min ){
>> 	   var $resultado1_afp1;
>>     	   var $resultado2_afp2;
>> 	   if( if($this->con->conectar()==true){
>> 	   {
>> 		// sigues implementando
>> 	   }		
>> 	}
>> }
>>
>> El sql lo escribiria yo en otra parte para poder cambiarlos cuando
>> quiera. En cuanto a la arquitectura de la aplicacion no te puedo decir
>> mucho ya que no tengo informaciones suficientes sobre tu codigo pero me
>> imagino que es la tarea algo asi como migrar un codigo de funcional a
>> orientado a objetos.
>>
>> Ten en cuenta ademas que debes tratar las variables antes de meterlas o
>> usarlas en sql. Prevee el SQL injection con los metodos que te da PHP
>> para esto. Acuerdate que colocando algo asi "SELECT * FROM empleados
>> WHERE id=".$id sin validar la variable te puede traer problemas de
>> inyeccion de codigo directo en la base de datos e incluso pueden extraer
>> la informacion.
>>
>> Saludos y suerte
>>
>> Carlos Medina
>>
>>
>> Am 02.08.2010 02:07, schrieb Carlos Sura:
>>> Y esta es la base de datos que tengo:
>>>
>>> 1.	SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
>>> 2.	
>>> 3.	--
>>> 4.	-- Base de datos: `sistemas`
>>> 5.	--
>>> 6.	
>>> 7.	-- --------------------------------------------------------
>>> 8.	
>>> 9.	--
>>> 10.	-- Estructura de tabla para la tabla `configuracion`
>>> 11.	--
>>> 12.	
>>> 13.	CREATE TABLE `configuracion` (
>>> 14.	  `id_configuracion` INT(4) NOT NULL AUTO_INCREMENT,
>>> 15.	  `nombre` VARCHAR(255) NOT NULL,
>>> 16.	  `valor` FLOAT(10,2) NOT NULL,
>>> 17.	  PRIMARY KEY  (`id_configuracion`)
>>> 18.	) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='tabla de
>>> configuracion para planilla' AUTO_INCREMENT=9 ;
>>> 19.	
>>> 20.	--
>>> 21.	-- Volcar la base de datos para la tabla `configuracion`
>>> 22.	--
>>> 23.	
>>> 24.	INSERT INTO `configuracion` VALUES (1, 'isss-empleado', 3.00);
>>> 25.	INSERT INTO `configuracion` VALUES (2, 'isss-patrono', 7.50);
>>> 26.	INSERT INTO `configuracion` VALUES (3, 'isss-salmax', 685.71);
>>> 27.	INSERT INTO `configuracion` VALUES (4, 'afp-empleado', 6.25);
>>> 28.	INSERT INTO `configuracion` VALUES (5, 'afp-patrono', 6.75);
>>> 29.	INSERT INTO `configuracion` VALUES (6, 'afp-min', 207.60);
>>> 30.	INSERT INTO `configuracion` VALUES (7, 'afp-max', 5354.52);
>>>
>>>
>>>
>>> Quiero que la función renta, isss, afp, lea los valores de esta tabla,
>>> verifique el salario del empleado y
>>> me regrese un valor en la caja, que sería uno, el descuento del isss, el
>>> otro del afp y  el otro de la renta
>>> Que el de la renta no tengo los valores de momento...
>>>
>>> -----Original Message-----
>>> From: Carlos Sura [mailto:[email protected]]
>>> Sent: domingo, 01 de agosto de 2010 06:06 p.m.
>>> To: '[email protected]'
>>> Subject: RE: [PHP-ES] Funcion en Clase PHP
>>>
>>> Esta es la clase que tengo empleado.class.php
>>>
>>>       function insertar($campos){
>>>           if($this->con->conectar()==true){
>>>               //print_r($campos);
>>>               //echo "INSERT INTO empleados (nombre, apellido, salario, dui,
>>> afp, isss, nit) VALUES ('".$campos[0]."',
>>> '".$campos[1]."','".$campos[2]."','".$campos[3]."','".$campos[4]."','".$camp
>>> os[5]."','".$campos[6]."')");
>>>               return mysql_query("INSERT INTO empleados (nombre, apellido,
>>> salario, dui, afp, isss, nit) VALUES ('".$campos[0]."',
>>> '".$campos[1]."','".$campos[2]."','".$campos[3]."','".$campos[4]."','".$camp
>>> os[5]."','".$campos[6]."')");
>>>           }
>>>       }
>>>
>>>       function actualizar($campos,$id){
>>>           if($this->con->conectar()==true){
>>>               //print_r($campos);
>>>               return mysql_query("UPDATE empleados SET nombre =
>>> '".$campos[0]."', apellido = '".$campos[1]."', salario = '".$campos[2]."',
>>> dui = '".$campos[3]."', afp = '".$campos[4]."', isss = '".$campos[5]."', nit
>>> = '".$campos[6]."' WHERE id = ".$id);
>>>           }
>>>       }
>>>
>>>       function mostrar_empleado($id){
>>>           if($this->con->conectar()==true){
>>>               return mysql_query("SELECT * FROM empleados WHERE id=".$id);
>>>           }
>>>       }
>>>
>>>       function mostrar_empleados(){
>>>           if($this->con->conectar()==true){
>>>               return mysql_query("SELECT * FROM empleados ORDER BY id DESC");
>>>           }
>>>       }
>>>
>>>       function eliminar($id){
>>>           if($this->con->conectar()==true){
>>>               return mysql_query("DELETE FROM empleados WHERE id=".$id);
>>>           }
>>>       }
>>> }
>>>
>>>
>>> Agrego, actualizo, muestro y elimino campos.
>>>
>>> Ahora bien, quiero agregarle las funciones a esta, pero sencillamente, no sé
>>> cómo hacer que los datos me los lea a la tabla que tengo que se llama:
>>> Configuraciones
>>>
>>> -----Original Message-----
>>> From: Carlos Sura [mailto:[email protected]]
>>> Sent: domingo, 01 de agosto de 2010 06:01 p.m.
>>> To: [email protected]
>>> Subject: [PHP-ES] Funcion en Clase PHP
>>>
>>> Hola amigos,
>>>
>>>
>>>
>>> Quisiera saber si me pueden ayudar… La verdad es que no estoy muy
>>> familiarizado con las clases en PHP… Y quisiera saber si me pueden explicar
>>> o ayudar… No requiero de mucho la verdad… Y si se preguntan porque decidí
>>> hacerlo en clases –y no sé nada- . La respuesta es porque me gusta probar
>>> cosas nuevas y aprender; segundo porque así me lo pidieron.
>>>
>>>
>>>
>>> Esta es la función:
>>>
>>>
>>>
>>> <?php
>>> function afp($patrono,$empleado,$salario,$max,$min){
>>>       var $patrono;
>>>       var $empleado;
>>>       var $resultado1_afp1;
>>>       var $resultado2_afp2;
>>>       if ($salario>= $max){
>>>           $resultado_afp1=$salario*$patrono;
>>>           $resultado_afp2=$salario*$empleado;
>>>       } else{
>>>           $resultado_afp1="";$resultado_afp2="";
>>>       }
>>>       ///resultados obtenidos en
>>> variables:////////////////////////////////////////////
>>>       //$resultado1_afp1;
>>>       //$resultado2_afp2;
>>> }
>>> function renta($patrono,$empleado,$salario,$max,$min){
>>>       var $patrono;
>>>       var $empleado;
>>> }
>>> function isss($patrono,$empleado,$salario,$max,$min){
>>>       var $patrono;
>>>       var $empleado;
>>>       var $patrono;
>>>       var $empleado;
>>>       var $resultado1_isss1;
>>>       var $resultado2_isss2;
>>>       if ($salario>= $max){
>>>           $resultado1_isss1=$max*$patrono;
>>>           $resultado2_isss2=$max*$empleado;
>>>       } else{
>>>           $resultado1_isss1=$salario*$patrono;
>>>           $resultado1_isss1=$salario*$empleado;
>>>           }
>>>       ///resultados obtenidos en
>>> variables:////////////////////////////////////////////
>>>       //$resultado1_isss1;
>>>       //$resultado2_isss2;
>>> }
>>>
>>>
>>> //isss emp 3%
>>> //isss pat 7.5%
>>> //isss max 685.7
>>> //afp-emp 6.25%
>>> //afp-pat 6.75%
>>> //afp-min 207.60
>>> //afp-max 5354.52
>>> //renta
>>> ?>
>>>
>>>
>>>
>>>
>>
>>
>> --
>> PHP Spanish Localization Talk Mailing List (http://www.php.net/)
>> To unsubscribe, visit: http://www.php.net/unsub.php
>>
>   		 	   		
Hola Carlos,
fijate que no termino de entender algo: Si deseas usar esa clase en la 
clase empleos pues solo necesitas incluirla e instancearla (si no estas 
usando autload) para usarla solo necesitas hacer
$procesos = new Procesos(); y llamar los metodos que necesitas, pero 
ojo, tienes metodos set y metodos get que son muy comunes en la 
programacion orientada a objetos pero que no te valen de nada si las 
variables de clase son declaradas ya con valores estaticos. Es decir, el 
constructor recibe una cantidad x de parametros que son fijos pero cuyo 
valor ya esta declarado en la clase? y entonces para que necesitas los set?

Te propongo una solucion basica al asunto:

class Procesos {

     var $isss_empleado = NULL;

     // constructor

     function Procesos( $options )
     {
         $isssEmpleado = 
(isset($options['isss_empleado']))?$options['isss_empleado']:3;
         $this->setIsssEmpleado( $isssEmpleado );
     }

     /**
     * Setter for the IsssEmpleado
     *
     * @param int $value
     */
     function setIsssEmpleado( $value )
     {
         if( isset( $value ))
         {
             $this->isss_empleado = $value;
         }
     }

     function getIsssEmpleado()
     {
         return $this->isss_empleado;
     }
}

En la clase solo se puede llenar las variables de clase con datos, si 
ellos estan vacios. Es decir por default se llenan las variables con los 
valores que has escogido y al instanciarla puedes cambiar por completo 
los valores. Asi aumentas la fexibilidad de la clase y quizas puedas 
usarla en otras cosas.
Ahora bien, de la misma manera si el salario es variable y viene de la 
base de datos puedes colocarlo como parametro en el constructor

     var $salarioVariable = null;

     // constructor

     function Procesos( $options )
     {
         $isssEmpleado = 
(isset($options['isss_empleado']))?$options['isss_empleado']:3;
         $this->setIsssEmpleado( $isssEmpleado );
         // salario variable
         if( false == isset($options['salario_variable']) )
         {
             return false;
         }
     }

o bien pasarlo por medio de un setter desde afuera:

$proc = new Procesos( $options );
$proc->setSalario( 1000000 );

Luego Puedes hacer con este objeto lo que quieras ya que esta lleno. Te 
recomiendo que leas un poco sobre las clases (mas a fondo) y sobretodo 
lo que son design Patterns.

Saludos y suerte

Carlos Medina
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.