Controlador + vista en cakePHP

Creamos el controlador Prueba:

App::uses('AppController', 'Controller');

/**
 * CakePHP PruebaController
 * @author a4alumno
 */
class PruebaController extends AppController {

 public function index() {
 die("Hasta aquí hemos legado");
 }

 public function saludo($nombre,$apellidos="") {
 $this->set('nombre',$nombre);
 $this->set('apellidos',$apellidos);
 $this->set('nombrecompleto',$apellidos.", ".$nombre);
 }
 
 public function suma($a,$b){
 $this->set('suma',$a+$b);
 }

 public function mayor($a,$b){
 if ($a<$b) $a=$b;
 $this->set('mayor',$a);
 }
}

En el ejemplo anterior tenemos las acciones: saludo, suma y mayor. Necesitaríamos una vista para cada una de ellas:

//archivo en View\Prueba\saludo.ctp

<h2><?=$nombrecompleto?></h2>
<h1>Hola que tal?</h1>
<?php

echo $nombre." ".$apellidos;
//archivo en View\Prueba\suma.ctp

<h2>La suma es <?=$suma?></h2>
//archivo en View\Prueba\mayor.ctp

<h2>El mayor es <?=$mayor?></h2>

Programación orientada a objetos

<?php

class miClase {

 public $propiedad;

 function muestraContenido() {
 echo $this->propiedad;
 }

}

$obj1 = new miClase;
$obj2 = new miClase();
$obj1->propiedad = "Hola";
$obj2->propiedad = "Adios";

echo $obj1->propiedad;
$obj2->muestraContenido();

class Alumno {

 public $nombre;
 public $apellido;
 public $nota;
 private $cuota;

 function nombreCompleto() {
 echo $this->nombre . " " . $this->apellido;
 }

 function aprobado() {
 if ($this->nota >= 5) {
 return true;
 } else {
 return false;
 }
 }

 function cuota($valor) {
 if ($valor == 100 || $valor == 200 || $valor == 300) {
 $this->cuota = $valor;
 }
 }

 function anualidad() {
 return $this->cuota * 12;
 }

}

$juan = new Alumno();
$ana = new Alumno();
$juan->nombre = "Juan";
$juan->apellido = "Pérez";
$juan->nota = 6;
$juan->nombreCompleto();
if ($juan->aprobado()) {
 echo "Aprobado!!!";
}
$juan->cuota(200);
echo $juan->anualidad();

$ana->apellido = "Ana";

Ejemplos repaso

 <?php
 $a = 5;
 echo 'Hola <b>que</b> tal?';
 if ($a == 5) {
 echo '<h1>Cabecera con echo</h1>'
 . '<h2>lalallalala</h2>'
 . '<p>texto tralalala</p>';
 }

 if ($a == 5) {
 ?>
 <h1>Cabecera sin echo</h1>
 <?php
 }

 $p = "cadena";
 $n = 5.5;
 $b = false;
 echo $p;
 $p = 74;
 echo $p;
 $tabla = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
 $tabla2 = [1, 2, 3, 4];

 $tabla3 = ['ana' => 1, "juan" => 3, "rosa" => 5];
 shuffle($tabla);
 for ($i = 0; $i < count($tabla); $i++) {
 echo $tabla[$i] . "<br/>";
 }
 sort($tabla);
 foreach ($tabla as $elemento) {
 echo $elemento . "<br/>";
 }

 foreach ($tabla3 as $clave => $valor) {
 echo $clave . "--->" . $valor . "<br/>";
 }

 echo nombredelafuncion(4, 4);

 echo "##" . levenshtein("Barcelona", "Bracelona");

 cabecera("Ola k ase???");

 echo strrev("Ola k ase???");

 function nombredelafuncion($parametro1, $parametro2) {
 return $parametro1 + $parametro2;
 }

 function cabecera($texto) {
 ?>
 <h1><?= $texto ?></h1>
 <?php
 }

 $server = "localhost";
 $user = "root";
 $password = "";
 $db = "tienda";

 try {
 $conn = new PDO("mysql:host=$server;dbname=$db", $user, $password);
 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 $conn->query("SET NAMES 'utf8';");
 } catch (PDOException $e) {
 echo "Connection failed: " . $e->getMessage();
 }

 //Inserta un producto
 $sql = "insert into productos (nombre,precio) values (:nombre,:precio)";
 $st = $conn->prepare($sql);
 $st->execute(array(
 ':nombre' => 'Tuerca',
 ':precio' => 10
 ));
 echo "Filas afectadas: " . $st->rowCount() . "<br/>";
 echo "Id producto: " . $conn->lastInsertId();

 //Borra un producto
 $sql = "delete from productos where idproductos=:idproductos";
 $st = $conn->prepare($sql);
 $st->execute(array(
 ':idproductos' => 11
 ));
 echo "Filas afectadas: " . $st->rowCount() . "<br/>";

 //Editar un producto
 $sql = "update productos set nombre=:nombre, precio=:precio where idproductos=:idproductos";
 $st = $conn->prepare($sql);
 $st->execute(array(
 ':idproductos' => 14,
 ':nombre' => 'arandela',
 ':precio' => 100
 ));
 echo "Filas afectadas: " . $st->rowCount() . "<br/>";

 $sql = "insert into productos (nombre,precio) values (:n,:p)";
 $st = $conn->prepare($sql);
 for ($i = 0; $i < 10; $i++)
 $st->execute(array(
 ':n' => 'producto' . $i,
 ':p' => $i * 3
 ));
 
 $sql="select * from productos";
 $st=$conn->prepare($sql);
 $st->execute();
 while ($row=$st->fetch()){
 echo $row['nombre']."<br/>";
 }
 
 echo "<hr/>";
 $st->execute();
 $filas=$st->fetchAll();
 foreach($filas as $fila_individual){
 echo $fila_individual['nombre']."<br/>";
 }
 ?>

Ejercicio validar mail

$cadenas = ["pepe@pepe.com", "ola k ase??", "@@@....", "hola.ssss@mmv", "pepe.com", "pepe@pepe"];
//Recorrer con for
for ($i = 0; $i < count($cadenas); $i++) {
 echo ($i + 1) . ".- " . $cadenas[$i] . (esMail2($cadenas[$i]) ? '' : ' no ') . " es mail.<br/>";
}
//Recorrer con foreach
foreach($cadenas as $cadena){
 echo $cadena . (esMail3($cadena) ? '' : ' no ') . " es mail.<br/>";
}

function esMail($cadena) {
 $pos1 = strpos($cadena, "@");
 $pos2 = strpos($cadena, ".");
 if ($pos1 !== false && $pos2 !== false && $pos2 > $pos1) {
 return true;
 } else {
 return false;
 }
}

function esMail3($cadena) {
 $pos1 = strpos($cadena, "@");
 $pos2 = strpos($cadena, ".",$pos1);
 return ($pos1 != false && $pos2 !== false);
}
function esMail2($cadena) {
 
 if ($pos = strpos($cadena, "@")) {
 return strpos($cadena, ".", $pos);
 }
 return false;
}

function esMailReg($cadena){
 return preg_match(
'/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',
$cadena);
}

function buscaMail($cadena){
 $pattern="/(?:[A-Za-z0-9!#$%&'*+=?^_`{|}~-]+(?:\.[A-Za-z0-9!#$%&'*+=?^_`{|}~-]+)*|\"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\")@(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[A-Za-z0-9-]*[A-Za-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/";
 preg_match_all($pattern,$cadena,$mails);
 return $mails;
}

Funciones Array (2)

Saber si existe un valor en el array:

$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
    echo "Existe Irix";
}
if (in_array("mac", $os)) {
    echo "Existe mac";
}

Máximo y mínimo de un array:

echo max(2, 3, 1, 6, 7);  // 7
echo max(array(2, 4, 5)); // 5

echo min(2, 3, 1, 6, 7);  // 1
echo min(array(2, 4, 5)); // 2

Ordenar arrays ¡Ojo si son asociativos! (ver manual)

$frutas = array("limón", "naranja", "banana", "albaricoque");
sort($frutas); //No asociativos
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
asort($fruits);//Asociativos
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits); //Ordena por clave
$números = range(1, 20);
shuffle($números); //Desordena

Aplicar una función a todos los elementos del array:

$frutas = array("d" => "limón", "a" => "naranja", "b" => "banana", "c" => "manzana");

function test_alter(&$elemento1, $clave, $prefijo)
{
    $elemento1 = "$prefijo: $elemento1";
}

function test_print($elemento2, $clave)
{
    echo "$clave. $elemento2
\n"; } echo "Antes ...:\n"; array_walk($frutas, 'test_print'); array_walk($frutas, 'test_alter', 'fruta'); echo "... y después:\n"; array_walk($frutas, 'test_print');

Union de arrays:
$union = array_unique(array_merge($a, $b));
Intersección:
$intersection = array_intersect($a, $b);
Diferencia:
$difference = array_diff($a, $b);
Diferencia simétrica:
$difference = array_merge(array_diff($a, $b), array_diff($b, $a));

Arrays multidimensionales en PHP

$b=array(array('A','b'),array('c','d','e','f'),array('g','h','i'));
echo "<pre>";
print_r($b);

echo "</pre>";

echo $b[1][2];
echo "<br/>";
for ($i=0;$i<count($b);$i++){
 for($j=0;$j<count($b[$i]);$j++){
 echo "($i,$j) ".$b[$i][$j]." | ";
 }
 echo "<br/>";
}

foreach($b as $valor){
 foreach($valor as $letra){
 echo $letra."|";
 }
 echo "<br/>";
}


for ($i = 0; $i < 5; $i++)
 for ($j = 0; $j < 5; $j++)
 $c[$i][$j] = $j + $i * 5;

 echo array_to_table($c);
 
function array_to_table($tabla) {
 $res="<table border=1>";
 for ($i = 0; $i < count($tabla); $i++) {
 $res.="<tr>";
 for ($j = 0; $j < count($tabla[$i]); $j++) {
 $res.="<td>" . $tabla[$i][$j] . "</td>";
 }
 $res.="</tr>";
 }
 $res.="</table>";
 return $res;
}

//Mezcla sin sentido, a lo loco:

$tutifruti=array('juan'=>array('a','b','c'),'ana'=>array('c'=>3,'d'=>6,'e'=>8),'rosa'=>array('j','k',array(1,2,3,4)));

var_dump($tutifruti);

Arrays asociativos en PHP

$a=array('Juan'=>'Técnico','Ana'=>'Marketing','Rosa'=>'Administración');
$a['Jose']='Ventas';
echo $a['Juan']."<br/>";
foreach($a as $clave=>$valor){
 echo $clave." - ".$valor."<br/>";
}
echo "<pre>";
print_r($a);
var_dump($a);
echo "</pre>";