<?php class BD { static $server = "localhost"; static $user = "root"; static $password = ""; static $database = "sakila"; private $table; static private $conn; public function __construct($table) { $this->table = $table; self::conectar(); } static function conectar() { try { self::$conn = new PDO("mysql:host=" . self::$server . ";dbname=" . self::$database, self::$user, self::$password, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"]); self::$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (Exception $ex) { echo $ex->getMessage(); } } function getAll() { $res = self::$conn->query("select * from " . $this->table); return $res->fetchAll(); } /** * Esta función nos devuelve el elemento de la tabla que tenga este id * @param int $id El id de la fila */ function getById($id) { $res = self::$conn->query("select * from " . $this->table . " where " . $this->table . "_id=" . $id); return $res->fetch(); } /** * Elimina el registro que tenga el id que le pasamos * @param int $id */ function deleteById($id) { try { self::$conn->exec("delete from " . $this->table . " where " . $this->table . "_id=" . $id); } catch (Exception $ex) { echo $ex->getMessage(); } } /** * Esta función toma como parámetro un array asociativo y nos inserta en la tabla * un registro donde la clave del array hace referencia al campo de la tabla y * el valor del array al valor de la tabla. * ejemplo para la tabla actor: insert(['first_name'=>'Ana','last_name'=>'Pi']) * @param type $valores */ function insert($valores) { try { $campos = join(",", array_keys($valores)); $parametros = ":" . join(",:", array_keys($valores)); $sql = "insert into " . $this->table . "($campos) values ($parametros)"; $st = self::$conn->prepare($sql); $st->execute($valores); } catch (Exception $ex) { echo $ex->getMessage(); } } } $actores = new BD("actor"); //print_r($actores->getAll()); $paises = new BD("country"); //$paises->insert(['country'=>'Chiquitistán']); //print_r($paises->getAll()); //print_r($actores->getById(1)); $v = ['first_name' => 'Ana', 'last_name' => 'Pimiento']; $actores->insert($v);
Mes: julio 2018
Clases y métodos finales
<?php //Clases final class Pepe { public function saludo() { echo "Hola"; } final public function despedida(){ echo "Adios"; } } class Pepito extends Pepe { public function saludo() { echo "Hola a todo"; } /* Esto da error public function despedida(){ echo "Adios muy buenas"; } * */ } final class NoHeredable{ public $departamento; } //Esto da error class QuieroHeredar extends NoHeredable{ } $p=new Pepito(); ?>
Recorrer propiedades objetos
<?php //Recorrer objetos class MiClase { public $var1 = 'valor 1'; public $var2 = 'valor 2'; public $var3 = 'valor 3'; protected $protected = 'variable protegida'; private $private = 'variable privada'; function iterateVisible() { echo "MiClase::iterateVisible:<br/>"; foreach ($this as $clave => $valor) { echo $clave." - ".$valor."<br/>"; } } } $clase=new MiClase(); foreach($clase as $clave=>$valor){ echo $clave." - ".$valor."<br/>"; } $clase->iterateVisible(); ?>
Rasgos (traits)
<?php //Rasgos (traits) trait Educado { function saludo() { echo "Hola"; } function despedida() { echo "adios"; } } trait HTML { function cabecera() { echo "<h1>$this->nombre</h1>"; } } class Pepe { use Educado; } class Juan { public $nombre; use Educado, HTML; } $obj = new Pepe; $obj->despedida(); $obj2 = new Juan(); $obj2->nombre="Juan"; $obj2->despedida(); $obj2->cabecera(); ?>
Interfaces
<?php //Interfaces interface webHTML{ public function dibujaTabla(); public function dibujaCabecera($nombre); } class miTabla implements webHTML{ public function dibujaTabla() { echo "<table><tr><td></td></tr></table>"; } public function dibujaCabecera($nombre) { echo "<h1>$nombre</h1>"; } public function saludo(){ echo "hola"; } } class OtraTabla implements webHTML{ public function dibujaTabla() { echo "hola"; } public function dibujaCabecera($nombre) { echo $nombre; } } ?>
Clases Abstractas
<?php //Clases abstractas //No se puede instanciar abstract class ClaseAbstracta { public $nombre; function saludo() { echo "Hola"; } abstract function despedida(); } class ClaseConcreta extends ClaseAbstracta { //Obligado a implementar despedida function despedida() { echo "adios"; } } //Da error porque no implementamos despedida class OtraClase extends ClaseAbstracta{ } $fallo=new ClaseAbstracta(); //ERROR $obj = new ClaseConcreta(); $obj->nombre = "Juan"; $obj->saludo();
Ejemplo conexión BD
<?php class BD { static $server = "localhost"; static $user = "root"; static $password = ""; static $database = "sakila"; private $table; static private $conn; public function __construct($table) { $this->table = $table; self::conectar(); } static function conectar() { try { self::$conn = new PDO("mysql:host=" . self::$server . ";dbname=" . self::$database, self::$user, self::$password, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"]); self::$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (Exception $ex) { echo $ex->getMessage(); } } function getAll(){ $res=self::$conn->query("select * from ".$this->table); return $res->fetchAll(); } } $actores=new BD("actor"); print_r($actores->getAll()); $paises=new BD("country"); print_r($paises->getAll());
Sobreescritura
<?php class A { public $nombre; public function __construct($nombre) { $this->nombre=$nombre; } function saludo(){ echo "Hola ".$this->nombre; } } class B extends A{ public $apellidos; public function __construct($nombre,$apellidos) { parent::__construct($nombre); $this->apellidos=$apellidos; } function saludo(){ echo "Hola ".$this->nombre." ".$this->apellidos; } } $ana=new A("Ana"); $ana->saludo(); $juan=new B("Juan","Pi"); $juan->saludo(); ?>
Valores estáticos
<?php class foo{ public static $ciudad="Barcelona"; public $nombre; public function __construct($nombre) { $this->nombre=$nombre; } public static function saludo(){ echo "Hola estoy en ".self::$ciudad; } public static function otroSaludo(){ echo "Hola ".$this->nombre; //Esto da un error por ser estático } } $ana=new foo("Ana"); $juan=new foo("Juan"); print_r($ana); print_r($juan); echo foo::$ciudad; echo $ana::$ciudad; echo $juan::$ciudad; foo::$ciudad="Turruncún"; echo foo::$ciudad; echo $ana::$ciudad; echo $juan::$ciudad; $juan::saludo(); $ana::saludo(); ?>
Constructores
<?php class A { public $elementos = []; public function __construct() { for ($i = 0; $i < 10; $i++) { $this->elementos[] = $i; } } } class B { public $elementos = []; public function __construct($num=10) { for ($i = 0; $i < $num; $i++) { $this->elementos[] = $i; } } } $a = new A(); $b = new A(); $c = new B(3); $d = new B(9); $e = new B(); print_r($c->elementos); print_r($d->elementos); print_r($e->elementos); ?>