Inicio
Software
Programación
HTML Programación - PHP (ini) Programación - PHP POO Programación - PHP / HTML SQL Java
Hardware
Desarrollos
Quién soy Mapa del sitio

PHP - 7ma Entrega Clases y Objetos

Imprimir
Categoría: PHP
Escrito por Ch4rl1X Visitas: 1978

acá vamos con las clases y objetos un tema muy importante casi fundamental para nuestro código.

A no asustarse que es difícil de comprender al vuelo... hace falta práctica y escribir los ejemplos que se nos ocurran modificarlos y verificarlos para que se pueda entender.

Por ahora vamos a mostrar lo básico:

Antiguamente cuando uno pensaba en programar se hacía pensando en la funcionalidad de lo que se estaba realizando, esto debe hacer lo siguiente, esto y esto otro.

Concepto para la programación orientada a objeto:

Desde los comienzos de la programación los programadores crean el código sobre la función que cumple, esto no está mal pero no está tan enlazado a la realidad.

Por ejemplo pensemos en una bicicleta (como objeto): Cuando uno se imagina una bicicleta comienza describiendo el objeto. Es decir: Una bicicleta tiene 2 ruedas, puede ser de color gris y puede tener que estar ubicado en una determinada posición, también puede estar desplazándose para los cuales se pueden crear las propiedades con determinados valores. Cuando pensamos en un objeto en programación no es muy diferente al ejemplo anterior.

Supongamos que tenemos que identificar familias de productos de una verdulería (si es un ejemplo pedorro pero la idea es practicar):

<?php
class verduras 
	{
	var $familia;
	var $num;
	var $proveedor;
	function __construct($familia, $num)
	{
	$this->familia=$familia;
	$this->num=$num;
	$this->proveedor=array();
	
	echo "<p>Nueva familia: ".$familia."</p>";
	}
	function crearNum()
	{
	return $this->num;
	}
	function crearFamilia()
	{
	return $this->familia;
	}
	}

//Llamamos a las familias instanciándolas

$familia1 = new verduras("Verduras", 1);
$familia2 = new verduras("Frutas", 2);
$familia3 = new verduras ("Hortalizas", 3);

echo "La familia de la verdura es: ".$familia1->crearFamilia()." y el n&uacute;mero relacionado es: ".$familia1->crearNum()." ";
?>

 La clave de la programación orientada a objetos son las clases. Se podría decir que la clase es todo lo que contiene el objeto. Como en el ejemplo de abajo de la verdulería tenemos una clase a la que llamamos verduras y vamos a usar en sus propiedades variables (que se indica con la palabra var) $familia y $num (a var $proveedor no le vamos a prestar atención). Seguimos con una función constructora que se define como "__construct" que es la que vamos a usar para pasar los parámetros una vez que llamemosa la clase. Finalmente terminamos con la funcionalidad creando las funciones crearNum que devuelve la variable $num y crearFamilia que devuelve crearFamilia. Mostramos las familias si existen con un echo (llamando a la variable). Y seguimos con la otra clave instanciar la clase, creamos algunas variables familias e instanciamos la clase con la palabra clave new a la que le pasamos los valores del método constructor que habíamos creado. Para finalmente llamar con un echo a los valores generados.

Resultado -> Click Aquí.

Si continuamos utilizando el ejemplo con el formulario, podríamos pasar las variables para construir nuestro objeto verdulería muy fácilmente a través de los ejemplos que venimos usando. Que proximamente voy a públicar.

Actualización!.

Esta vuelta les voy a mostrar como crearemos una suma usando una clase. Antes de seguir. La causa fundamental por la que un programador usa esta orientación a objetos es por la practicidad y orden que se otorga al código que se genera, así mismo permite la vinculación de diferentes métodos funcionales en nuestras aplicaciones y también la centralización de nuestras operaciones. Aunque ahora veamos como crear una clase sumar y restar algunos valores e imprimirlos en pantalla... este código es sólo ilustrativo y difiere mucho de lo que para realmente es el objetivo de esta forma de programar.

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Sumando valores con clases</title>
</head>

<body>

<?php
class Operacion {
  protected $valor1;
  protected $valor2;
  protected $resultado;
  public function cargarValores($v, $v2)
  {
    $this->valor1=$v;
	$this->valor2=$v2;
  }
  public function imprimirResultado()
  {
    echo $this->resultado.'<br>';
  }
}

class Suma extends Operacion{
  public function operar()
  {
    $this->resultado=$this->valor1+$this->valor2; 
  }
}

class Resta extends Operacion{
  public function operar()
  {
    $this->resultado=$this->valor1-$this->valor2;
  }
}

echo "<form action=".$_SERVER['PHP_SELF']." method=post>".
	   "<input type=text name=calc1 value=".$_POST['calc1'].">".
	   "<input type=text name=calc2 value=".$_POST['calc2'].">"
      ."<input type=submit value=enviar></form>";

$suma=new Suma();
$suma->cargarValores($_POST['calc1'], $_POST['calc2']);
$suma->operar();
echo 'El resultado de la suma de '.$_POST['calc1'].'+ '.$_POST['calc2'].' es:';
$suma->imprimirResultado();

$resta=new Resta();
$resta->cargarValores($_POST['calc1'], $_POST['calc2']);
$resta->operar();
echo 'El resultado de la diferencia de '.$_POST['calc1'].'-'.$_POST['calc2'].' es:';
$resta->imprimirResultado();

?>

</body>
</html>

Resultado->Click Aquí.

Supongamos que estamos creando una clase para el control de cadenas de texto, para éste caso aplicado a los números... seguimos practicando como se compone la clase y aplicamos una función prefabricada de PHP para alcanzar nuestro objetivo.

<?php

class controlDeTexto
{

private $controlIngreso;

public function tieneQueSer($tQS)
{
$this->controlIngreso = $tQS;

$posiblesValores = '01020304';
//$requiere   = '05';

$posVal = strripos($posiblesValores, $tQS);

if ($posVal === false) {
    echo "Pap&aacute;, no se encuentra ($tQS) en ($posiblesValores)";
} else {
    echo "Listo!\n";
    echo "Se encontro ($tQS) en ($posiblesValores) en el lugar ($posVal)";
}
}

public function mostrar()
{
//pruebo sacarle el echo, para verificar si no me muestra el valor final y pasa por los valores de las variables.
//echo $this->controlIngreso;
$this->controlIngreso;
}

}

$valorDevuelto = new controlDeTexto;
$valorDevuelto->tieneQueSer($_POST['tipo1']);
$valorDevuelto->mostrar();

?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<fieldset>
<legend>Ingresa los posibles valores.</legend>
<input type="text" id="tipo1" name="tipo1" value="<?php echo $_POST['tipo1']; ?>"/>
<p>Los posibles valores son: 01020304</p>
<br />
<input type="submit" value="Enviar" name="Enviar"/>
<input type="reset" value="Limpiar" />
</fieldset>
</form>

No está muy lejos de lo que venimos aplicando, creamos la clase con un nombre personalizado, creo la variable que van a proveer al método seguido de la función a la que le asigno el parámetro tQS, adentro de la clase ya trabajo con las variables puras y devuelvo los valores correspondientes llamando a la salida tipo1 del form que envía los datos.... si valida muestra una leyenda y sino la otra ( nivel fácil - intermedio ), el ejemplo está pensado para comparar 2 caracteres y que devuelva verdadero si es correcto.

Resultado -> Click Aquí.

Otro ejemplo interesante creamos 2 clases con 2 funciones para que nos emita un mensaje personalizado en cada una:

<?php

class controlDeTexto
{

protected $controlIngreso;
protected $contarLetras;

public function tieneQueSer($tQS)
{
$this->controlIngreso = $tQS;

$posiblesValores = '000102030405060708091011121314151617181920212223';
//$requiere   = '05';

$posVal = strripos($posiblesValores, $tQS);

if ($posVal === false) {
    echo "No se adminte el valor, no se encuentra definido</br>";
} else {
//Si es correcto pasa el valor, sino muestra error.
}
}

public function mostrar()
{
$this->controlIngreso;
}

}

class contarLetras extends controlDeTexto
{

public function contarValoresLetras($cVL)
{

$this->contarLetras = $cVL;

$chars = strlen($cVL);

if ($chars == 2)
{

//Si el valor es encontrado pasa sino, muestra un error.

}
else
{
echo "El valor debe contener 2 caracteres solamente.";	
}


}

}
$valorDevuelto = new controlDeTexto;
$valorDevuelto->tieneQueSer($_POST['tipo1']);
$valorDevuelto->mostrar();

$contarCarac = new contarLetras();
$contarCarac->contarValoresLetras($_POST['tipo1']);
$valorDevuelto->mostrar();

?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<fieldset>
<legend>Ingresa los posibles valores.</legend>
<input type="text" size="2" maxlength="2" id="tipo1" name="tipo1" value="<?php echo $_POST['tipo1']; ?>"/>
<p>Posibles Valores: 000102030405060708091011121314151617181920212223</p>
<br />
<input type="submit" value="Enviar" name="Enviar"/>
<input type="reset" value="Limpiar" />
</fieldset>
</form>

En este caso demostrativo usamos una clase extendida que no aplica a lo que realmente sería una subclase, lo usamos de ejemplo para mostrar la funcionalidad y como aplicarla. En este caso podríamos pasar el Valor de $_POST['tipo1']; a una segunda función de controlIngreso de la misma clase "controlDeTexto".

Resultado -> Click Aquí.

Espero que sirva. Saludos!

Ch4rl1X.