Otros > Los Retos PHPeros
Reto #4 - Practicando con clases en PHP
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('calculadoraClass.php');
?>
<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['ok'])) {
$num1 = $_POST['numero1'];
$num2 = $_POST['numero2'];
$varcalcu = new calculadora();
if(is_numeric($num1) && is_numeric($num2)) {
switch ($_POST['operacion']) { // 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 's': $this->resultado = $this->numero1+$this->numero2; break;
case 'r': $this->resultado = $this->numero1+$this->numero2; break;
case 'm': $this->resultado = $this->numero1*$this->numero2; break;
case 'd': $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('calculadora.class.php');
$calculadora = new calculadora();
$calculadora->numeros($_POST['num1'], $_POST['num2']);
$calculadora->operar($_POST['op']);
echo 'El resultado es: '.$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
[#] Página Siguiente
Ir a la versión completa