jueves, 7 de enero de 2016

Objetos en PHP 5

Una vez que las clases han sido declaradas, será necesario crear los objetos y utilizarlos, aunque hemos visto que algunas clases, como las clases abstractas son solo modelos para otras, y por lo tanto no necesitan instanciar al objeto.

Instanciar una clase
Para instanciar una clase, solo es necesario utilizar la palabra clave new. El objeto será creado, asignando esta instancia a una variable (la cual, adoptará la forma de objeto).
Lógicamente, la clase debe haber sido declarada antes de ser instanciada, como se muestra a continuación:

# declaro la clase
class Persona {
#...
}
# creo el objeto instanciando la clase
$persona = new Persona();

Reglas de Estilo sugeridas

Utilizar nombres de variables (objetos) descriptivos, siempre en letra minúscula, separando palabras por guiones bajos. Por ejemplo si el nombre de la clase es NombreDeMiClase como variable utilizar $nombre_de_mi_clase. Esto permitirá una mayor legibilidad del código.

Propiedades en PHP 5
Las propiedades representan ciertas características del objeto en sí mismo. Se definen anteponiendo la palabra clave var al nombre de la variable (propiedad):

class Persona {
var $nombre;
var $edad;
var $genero;
}

Las propiedades pueden gozar de diferentes características, como por ejemplo, la visibilidad: pueden ser públicas, privadas o protegidas. Como veremos más adelante, la visiblidad de las propiedades, es aplicable también a la visibilidad de los métodos.

Propiedades públicas

Las propiedades públicas se definen anteponiendo la palabra clave public al nombre de la variable. Éstas, pueden ser accedidas desde cualquier parte de la aplicación, sin restricción.

class Persona {
public $nombre;
public $genero;
}

Propiedades privadas
Las propiedades privadas se definen anteponiendo la palabra clave private al nombre de la variable. Éstas solo pueden ser accedidas por la clase que las definió.

class Persona {
public $nombre;
public $genero;
private $edad;
}
 
Propiedades protegidas
Las propiedades protegidas pueden ser accedidas por la propia clase que la definió, así como por las clases que la heredan, pero no, desde otras partes de la aplicación. Éstas, se definen anteponiendo la palabra clave protected al nombre de la variable:

class Persona {
public $nombre;
public $genero;
private $edad;
protected $pasaporte;
}

Propiedades estáticas
Las propiedades estáticas representan una característica de “variabilidad” de sus datos, de gran importancia en PHP 5. Una propiedad declarada como estática, puede ser accedida sin necesidad de instanciar un objeto. y su valor es estático (es decir, no puede variar ni ser modificado). Ésta, se define anteponiendo la palabra clave static al nombre de la variable:

class PersonaAPositivo extends Persona {
public static $tipo_sangre = 'A+';

Clases y Objetos en PHP 5

Definición de Clases
Según el Manual Oficial de PHP, una Clase es:
[…] “una colección de variables y funciones que trabajan con estas variables. Las variables se definen utilizando var y las funciones utilizando function” [...]

Para definir una clase, el Manual Oficial de PHP, continúa diciendo:
[…] “La definición básica de clases comienza con la palabra clave class, seguido por un nombre de clase, continuado por un par de llaves que encierran las definiciones de las propiedades y métodos pertenecientes a la clase. El nombre de clase puede ser cualquier etiqueta válida que no sea una palabra reservada de PHP. Un nombre válido de clase comienza con una letra o un guión bajo, seguido de la cantidad de letras, números o guiones bajos que sea.” […]

Veamos un ejemplo de definición de clase:
class NombreDeMiClase {
#...
}

Reglas de Estilo sugeridas

Utilizar CamelCase para el nombre de las clases.
La llave de apertura en la misma línea que el nombre de la clase, permite una mejor legibilidad del código.

Declaración de Clases abstractas
Las clases abstractas son aquellas que no necesitan ser instanciadas pero sin embargo, serán heredadas en algún momento. Se definen anteponiendo la palabra clave abstract a class:

abstract class NombreDeMiClaseAbstracta {
#...
}

Este tipo de clases, será la que contenga métodos abstractos (que veremos más adelante) y generalmente, su finalidad, es la de declarar clases “genéricas” que necesitan ser declaradas pero a las cuales, no se puede otorgar una definición precisa (de eso, se encargarán las clases que la hereden).

Herencia de Clases
Los objetos pueden heredar propiedades y métodos de otros objetos. Para ello, PHP permite la “extensión” (herencia) de clases, cuya característica representa la relación existente entre diferentes objetos. Para definir una clase como extención de una clase “padre” se utiliza la palabra clave extends.

class NombreDeMiClasePadre {
#...
}

class NombreDeMiClaseHija extends NombreDeMiClasePadre {
/* esta clase hereda todos los métodos y propiedades de la clase padre NombreDeMiClasePadre
*/
}

Declaración de Clases finales En PHP
PHP 5 incorpora clases finales que no pueden ser heredadas por otra. Se definen anteponiendo la palabra clave final.

final class NombreDeMiClaseFinal {
#esta clase no podrá ser heredada
}

Características conceptuales de la POO

La POO debe guardar ciertas características que la identifican y diferencian de otros paradigmas de programación. Dichas características se describen a continuación.

Abstracción

Aislación de un elemento de su contexto. Define las características esenciales de un objeto.

Encapsulamiento
Reúne al mismo nivel de abstracción, a todos los elementos que puedan considerarse pertenecientes a una misma entidad.

Modularidad

Característica que permite dividir una aplicación en varias partes más pequeñas (denominadas módulos), independientes unas de otras.

Ocultación (aislamiento)
Los objetos están aislados del exterior, protegiendo a sus propiedades para no ser modificadas por aquellos que no tengan derecho a acceder a las mismas.

Polimorfismo
Es la capacidad que da a diferentes objetos, la posibilidad de contar con métodos, propiedades y atributos de igual nombre, sin que los de un objeto interfieran con el de otro.

Herencia
Es la relación existente entre dos o más clases, donde una es la principal (padre) y otras son secundarias y dependen (heredan) de ellas (clases “hijas”), donde a la vez, los objetos heredan las características de los objetos de los cuales heredan.

Recolección de basura

Es la técnica que consiste en destruir aquellos objetos cuando ya no son necesarios, liberándolos de la memoria.

Elementos de la POO (Programación Orientada a Objetos)

Clase
Una clase es un modelo que se utiliza para crear objetos que comparten un mismo comportamiento, estado e identidad.

class Persona {
# Propiedades
# Métodos
}

Objeto
Es una entidad provista de métodos o mensajes a los cuales responde (comportamiento); atributos con valores concretos (estado); y propiedades (identidad).

$persona = new Persona();
/*
El objeto, ahora, es $persona,
que se ha creado siguiendo el modelo de la clase Persona
*/

Método
Es el algoritmo asociado a un objeto que indica la capacidad de lo que éste puede hacer.

function caminar() {
#...
}

Evento y Mensaje
Un evento es un suceso en el sistema mientras que un mensaje es la comunicación del suceso dirigida al objeto.

Propiedades y atributos
Las propiedades y atributos, son variables que contienen datos asociados a un objeto.

$nombre = 'Juan';
$edad = '25 años';
$altura = '1,75 mts';

sábado, 5 de diciembre de 2015

Ejemplo de inserción de datos PHP usando mysqli

// Preparar las variables con los datos de conexión
$host = 'localhost';
$usuario = 'root';
$clave = 'contraseña';
$db = 'curso_php';

// Conectarse a la base de datos
$conn = mysqli_connect($host, $usuario, $clave, $db);

// Preparo la sentencia con los comodines ?
$sql = " INSERT INTO usuarios (username, email, password) VALUES (?, ?, ?) ";

// Preparo los datos que voy a insertar
$username = 'juan-perez';
$email = 'juan_perez@algundominio.ext';
$password = '26ec07ef61f135494b79a13674a9a4ae';

// Preparo la consulta
$pre = mysqli_prepare($conn, $sql);

// indico los datos a reemplazar con su tipo
mysqli_stmt_bind_param($pre, "sss", $username, $email, $password);

// Ejecuto la consulta
mysqli_stmt_execute($pre);

// PASO OPCIONAL (SOLO PARA CONSULTAS DE INSERCIÓN):
// Obtener el ID del registro insertado
$nuevo_id = mysqli_insert_id($conn);

// Cierro la consulta y la conexión
mysqli_stmt_close($pre);
mysqli_close($conn);

POO con PHP Basico Parte XVII

Rutas
El directorio punto (.) es el directorio donde se está ejecutando el script. Así si un script está en el mismo directorio que otro, puede incluirlo sin necesidad de especificar más nada.
Una dirección absoluta es una dirección que comienza desde la raíz del sistema de archivos:



Una ruta relativa, es una ruta a la que le falta especificar desde donde se lee:

POO con PHP Basico Parte XVI



El código de la parte superior es equivalente a este en funcionalidad.
Los include/require permiten partir archivos en varios pedazos.


Sólo imprime una vez  "Hola Pepito!" ya que la instrucción  require_once se asegura de no incluir el mismo archivo dos veces.
La instrucción include_once también está disponible.