Autor Tema: Reto #4 - Practicando con clases en PHP  (Leído 5041 veces)

Desconectado WarezD@rK

  • PHPer@ Fijo
  • ***
  • Mensajes: 162
  • Karma: 8
  • Sexo: Masculino
  • Pasaba por aquí...
    • Ver Perfil
    • Ninguno
Reto #4 - Practicando con clases en PHP
« en: 19 de Febrero de 2010, 00:55:44 am »
A raíz del tutorial sobre clases y de la clase MySQL, una forera me ha pedido que ponga un ejercicio sencillo acerca de este tema, así que lo publico como reto.

Dificultad: Fácil
Se valorará: Estructuración, sintaxis y comentarios en el código. Se valorará también el control de errores.
Premio: La satisfacción de haber aportado algo a la comunidad.

Reto: Crear una clase "Calcular" la cual tendrá su constructor y 5 métodos (funciones) que serán: Sumar, restar, multiplicar, dividir y resultado.

Su ejecución deberá ser algo parecido a esto:

Código: [Seleccionar]
<?php
$operacion 
= new Calcular();
$operacion->operanteUno(5);
$operacion->operanteDos(3);
$operacion->multiplicar();
echo 
$operacion->resultado();
?>

La clase, variables y métodos se podrán llamar como queráis, siempre y cuando tengan un nombre coherente (una clase para realizar una operación que se llame "DrHouse" o "Pokemon" no es muy coherente, la verdad).

Ayuda:

Tutorial sobre clases: http://www.phperos.net/foro/index.php/topic,5093.0.html
Clase MySQL: http://www.phperos.net/foro/index.php/topic,5095.0.html

La gracia es que lo hagáis a partir de la información que hay exclusivamente en el foro y os aseguro que hay de sobras.
Si tenéis alguna duda acerca del reto o sobre su programación, exponedla en este hilo y a poder ser no copiéis, os estaréis engañando a vosotros mismos, yo dormiré igual de bien que siempre.



NOTA: No tengo problema en ir publicando retos más difíciles, solo depende de vuestras ganas de aprender.



Un saludo :)
« Última modificación: 19 de Febrero de 2010, 07:57:37 am por TLX »
Trabajando en mi actual proyecto.

Comunidad PHPeros

Reto #4 - Practicando con clases en PHP
« en: 19 de Febrero de 2010, 00:55:44 am »

Desconectado x.mara.x

  • PHPero Master
  • ******
  • Mensajes: 1.364
  • Karma: 57
  • Sexo: Femenino
    • Ver Perfil
Re:Reto #4 - Practicando con clases en PHP
« Respuesta #1 en: 19 de Febrero de 2010, 13:00:26 pm »
Buenas, despues de un poco de lio lo logre
Calculadora
calculadoraClass.php
<?php
class calculadora {
	
var 
$operacion;
	
var 
$numero1;
	
var 
$numero2;
	
var 
$resultado;
	
public function 
sumar($xxnumero1,$xxnumero2) {
	
	
$this->resultado $xxnumero1+$xxnumero2;
	
	
return 
$this->resultado;
	
}
	
public function 
restar($xxnumero1,$xxnumero2) {
	
	
$this->resultado $xxnumero1-$xxnumero2;
	
	
return 
$this->resultado;
	
}
	
public function 
mult($xxnumero1,$xxnumero2) {
	
	
$this->resultado $xxnumero1*$xxnumero2;
	
	
return 
$this->resultado;
	
}
	
public function 
dividir($xxnumero1,$xxnumero2) {
	
	
$this->resultado $xxnumero1/$xxnumero2;
	
	
return 
$this->resultado;
	
}
	

}
?>

calcucl.php
<?php
include(&#39;calculadoraClass.php&#39;);
?>

<form name="form1" method="post" action="">
  <p>
    <label>
      <input type="text" name="numero1" id="calcucl.php">
    </label>
    <label>
      <select name="operacion" id="operacion">
        <option value="x">X</option>
        <option value="/">/</option>
        <option value="-">-</option>
        <option value="+">+</option>
      </select>
    </label>
    <input type="text" name="numero2" id="numero2">
  </p>
  <p>
    <label>
      <input type="submit" name="ok" id="ok" value="Calcular">
    </label>
  </p>
</form>
<?php
if(isset($_POST[&#39;ok&#39;])) {
	
$num1 $_POST[&#39;numero1&#39;];
	
$num2 $_POST[&#39;numero2&#39;];
	
$varcalcu = new calculadora();
if(
is_numeric($num1) && is_numeric($num2)) {
	
	
switch (
$_POST[&#39;operacion&#39;]) { // empezamos un switch que nos enviara a la funcion que corresponde a la operacion
	
	
	
case 
"+":
	
	
	
$varcalcu->sumar($num1,$num2);
	
	
	
break;
	
	
	
case 
"-":
	
	
	
$varcalcu->restar($num1,$num2);
	
	
	
break;
	
	
	
case 
"x":
	
	
	
$varcalcu->mult($num1,$num2);
	
	
	
break;
	
	
	
case 
"/":
	
	
	
$varcalcu->dividir($num1,$num2);
	
	
	
break;
	
	
}
echo 
$varcalcu->resultado;
} else {
	
echo
"Los valores de los numeros deben ser númericos!";
}
}
?>

Si hay algo que esta de sobra/podria ser mejorado en el codigo avisame :D
El codigo no lo explique porque me parece bastante sencillo, de todas maneras expliqué el uso del switch.
« Última modificación: 19 de Febrero de 2010, 13:02:27 pm por x.mara.x »

Desconectado WarezD@rK

  • PHPer@ Fijo
  • ***
  • Mensajes: 162
  • Karma: 8
  • Sexo: Masculino
  • Pasaba por aquí...
    • Ver Perfil
    • Ninguno
Re:Reto #4 - Practicando con clases en PHP
« Respuesta #2 en: 19 de Febrero de 2010, 14:32:15 pm »
Está bastante bien, aunque veo un par de cosas mejorables en tu código, pero esperaré a ver si alguien más se anima a participar.
Trabajando en mi actual proyecto.

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:Reto #4 - Practicando con clases en PHP
« Respuesta #3 en: 19 de Febrero de 2010, 20:02:14 pm »

class calculadora {
	
private 
$numero1;
	
private 
$numero2;
	
private 
$resultado;
	
function 
__construct($numero1 0$numero2 0) {
	
	
$this->numero1 = (is_numeric($numero1) ? $numero1 0);
	
	
$this->numero2 = (is_numeric($numero2) ? $numero2 0);
	
}
	
public function 
numeros($numero1$numero2) {
	
	
$this->numero1 = (is_numeric($numero1) ? $numero1 $this->numero1);
	
	
$this->numero2 = (is_numeric($numero2) ? $numero2 $this->numero2);
	
}

	
public function 
operar($operacion) {
	
	
switch(
$operacion) {
	
	
	
case &
#39;s&#39;: $this->resultado = $this->numero1+$this->numero2; break;
	
	
	
case &
#39;r&#39;: $this->resultado = $this->numero1+$this->numero2; break;
	
	
	
case &
#39;m&#39;: $this->resultado = $this->numero1*$this->numero2; break;
	
	
	
case &
#39;d&#39;: $this->resultado = ($this->numero2 == 0 ? $this->numero1 : $this->numero1/$this->numero2); break;
	
	
	
default: 
$this->resultado 0;
	
	
}
	
}
	
public function 
verResultado() {
	
	
return 
$this->resultado;
	
}
}

Esa es la clase, la calculadora sería:

<?php
if($_POST) {
	
include(&
#39;calculadora.class.php&#39;);
	
$calculadora = new calculadora();
	
$calculadora->numeros($_POST[&#39;num1&#39;], $_POST[&#39;num2&#39;]);
	
$calculadora->operar($_POST[&#39;op&#39;]);
	
echo &
#39;El resultado es: &#39;.$calculadora->verResultado();
}
?>
<form action="" method="post">
<input type="text" name="num1" /> <select name="op"><option value="s">+</option><option value="r">-</option><option value="m">x</option><option value="d">:</option></select> <input type="text" name="num2" />
<br />
<input type="submit" name="submit" value="Operar" />
</form>


Tengo dudas con eso de los valores por defecto en el constructor... xD

Salu2

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
Re:Reto #4 - Practicando con clases en PHP
« Respuesta #4 en: 19 de Febrero de 2010, 20:35:35 pm »
Bueno, no participare porque west me robo la idea xdd.. Veo un error en el código de west y es que usas 1 función para definir pudiendolo hacer en el contructor... Además de que en el contructor siempre te dara TRUE porque solo cojera los valores por default.
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:Reto #4 - Practicando con clases en PHP
« Respuesta #5 en: 19 de Febrero de 2010, 20:38:10 pm »
Bueno, no participare porque west me robo la idea xdd.. Veo un error en el código de west y es que usas 1 función para definir pudiendolo hacer en el contructor... Además de que en el contructor siempre te dara TRUE porque solo cojera los valores por default.
No te entendí lo segundo.
Pero la función, si te refieres en el form, es simplemente por darle algún uso...

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
Re:Reto #4 - Practicando con clases en PHP
« Respuesta #6 en: 19 de Febrero de 2010, 20:45:32 pm »
Lo que quiero decirte es que quites esta parte:
public function numeros($numero1$numero2) {
	
	
$this->numero1 = (is_numeric($numero1) ? $numero1 $this->numero1);
	
	
$this->numero2 = (is_numeric($numero2) ? $numero2 $this->numero2);
	
}


Y para definir las variables haz esto:

$calculadora 
= new calculadora($numero1,$numero2);

Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:Reto #4 - Practicando con clases en PHP
« Respuesta #7 en: 19 de Febrero de 2010, 20:57:58 pm »
Lo que quiero decirte es que quites esta parte:
public function numeros($numero1$numero2) {
	
	
$this->numero1 = (is_numeric($numero1) ? $numero1 $this->numero1);
	
	
$this->numero2 = (is_numeric($numero2) ? $numero2 $this->numero2);
	
}


Y para definir las variables haz esto:

$calculadora 
= new calculadora($numero1,$numero2);

Sí, sí, lo sé, pero como el reto requería una función para eso, lo puse así, además no seamos tan tiquismiquis que al fin y al cabo casi con una función va que chuta

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
Re:Reto #4 - Practicando con clases en PHP
« Respuesta #8 en: 19 de Febrero de 2010, 21:12:16 pm »
West pero tampoco tan asi xdd

Veo un error en el código de mara, lo primero es que para llamar a una variable no es $varcalcu->resultado sino $this->resultado, lo segundo esque para que vas a poner el resultado de nuevo si en cada funcion se retorna el resultado.
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:Reto #4 - Practicando con clases en PHP
« Respuesta #9 en: 19 de Febrero de 2010, 21:21:37 pm »
West pero tampoco tan asi xdd

Veo un error en el código de mara, lo primero es que para llamar a una variable no es $varcalcu->resultado sino $this->resultado, lo segundo esque para que vas a poner el resultado de nuevo si en cada funcion se retorna el resultado.
No, porque accede desde fuera de la clase, la cual almacena en $varcalcu

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
Re:Reto #4 - Practicando con clases en PHP
« Respuesta #10 en: 19 de Febrero de 2010, 22:20:50 pm »
No, porque accede desde fuera de la clase, la cual almacena en $varcalcu
Eso no tiene que ver.
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:Reto #4 - Practicando con clases en PHP
« Respuesta #11 en: 19 de Febrero de 2010, 22:22:00 pm »
Eso no tiene que ver.
Eso sí tiene que ver...

$pepe 
= new user(&#39;pepe&#39;);
echo $pepe->mostrarTrabajo();

Ahí NO EXISTE $this! la clase es $pepe!

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
Re:Reto #4 - Practicando con clases en PHP
« Respuesta #12 en: 19 de Febrero de 2010, 22:25:53 pm »
Eso sí tiene que ver...

$pepe 
= new user(&#39;pepe&#39;);
echo $pepe->mostrarTrabajo();

Ahí NO EXISTE $this! la clase es $pepe!
Porque es una función.
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:Reto #4 - Practicando con clases en PHP
« Respuesta #13 en: 19 de Febrero de 2010, 22:28:37 pm »
Porque es una función.
Y DALE QUE DALE!
Mira este código de la clase MySQL de Warez@Dark:

<?php
$consultas 
= new mysqlQuery(array("UPDATE tabla SET nombre = &#39;WarezD@rK&#39;",
                                                 
"UPDATE tabla SET apellidos = &#39;PHPeros&#39;",
                                                 
"UPDATE tabla SET edad = &#39;22&#39;",
                                                 
"UPDATE tabla SET pais= &#39;España&#39;",
                                                 
"UPDATE tabla SET ciudad = &#39;Barcelona&#39;"));
$consultas->send();
?>

...

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
Re:Reto #4 - Practicando con clases en PHP
« Respuesta #14 en: 19 de Febrero de 2010, 22:39:38 pm »
Y DALE QUE DALE!
Mira este código de la clase MySQL de Warez@Dark:

<?php
$consultas 
= new mysqlQuery(array("UPDATE tabla SET nombre = &#39;WarezD@rK&#39;",
                                                 
"UPDATE tabla SET apellidos = &#39;PHPeros&#39;",
                                                 
"UPDATE tabla SET edad = &#39;22&#39;",
                                                 
"UPDATE tabla SET pais= &#39;España&#39;",
                                                 
"UPDATE tabla SET ciudad = &#39;Barcelona&#39;"));
$consultas->send();
?>

...
Es verdad lo que decias..
« Última modificación: 19 de Febrero de 2010, 22:54:57 pm por Focux »
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>