Otros > Los Retos PHPeros

Reto #4 - Practicando con clases en PHP

(1/5) > >>

WarezD@rK:
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: ---<?php
$operacion = new Calcular();
$operacion->operanteUno(5);
$operacion->operanteDos(3);
$operacion->multiplicar();
echo $operacion->resultado();
?>
--- Fin del código ---

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 :)

x.mara.x:
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.

WarezD@rK:
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.

westwest:

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

Focux:
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.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa