1. Interfaces de objetos
1.1. Permiten especificar qué métodos deben ser implementados por una clase
1.2. Contienen métodos vacíos que obligan a una clase a emplearlos
1.2.1. Todos los métodos son públicos
1.3. Ejemplo de definición: interface Automóvil { ...//métodos vacíos}
1.4. Implements
1.4.1. Para implementar una interfaz
1.4.2. Todos los métodos deben ser implementados dentro de la clase
1.4.3. Ejemplo: class Coche implements Automóvil {...//métodos de la interface}
1.5. Constantes
1.5.1. Es posible tenerlas dentro de las interfaces
1.5.2. No pueden ser sobrescritas por una clase/interfaz que las herede
2. Rasgos (Traits)
2.1. Metodología de reutilización de código
2.2. Similar a una clase, pero con el objetivo de agrupar funcionalidades muy específicas y de manera coherente
2.3. Si dos Traits insertan un método con el mismo nombre, se produce error fatal
2.3.1. Para resolverlo, se usa insteadof
2.3.2. Se puede utilizar as para añadir un alias a uno de los métodos
3. Clases anónimas
3.1. Útiles cuando es necesario crear objetos sencillos y únicos
3.2. Ahorro de memoria y mejora el rendimiento de la aplicación
3.3. El motor PHP les asigna un nombre
4. Sobrecarga
4.1. Ofrece los medios para crear dinámicamente propiedades y métodos
4.2. Se invoca cuando se interactúa con propiedades o métodos que no se han declarado o que no son visibles en el ámbito activo
4.3. Todos los métodos sobrecargados debe definirse como públicos
4.4. Sobrecarga de propiedades
4.4.1. __set()
4.4.1.1. Se ejecuta al escribir datos sobre propiedades inaccesibles
4.4.1.2. Definición : public void __set ( string $name , mixed $value )
4.4.2. __get()
4.4.2.1. Para consultar datos a partir de propiedades inaccesibles.
4.4.2.2. Definición: public mixed __get ( string $name )
4.4.3. __isset()
4.4.3.1. Cuando se llama a isset() o a empty() sobre propiedades inaccesibles
4.4.3.2. Definición: public bool __isset ( string $name )
4.4.4. __unset()
4.4.4.1. Cuando se usa unset() sobre propiedades inaccesibles
4.4.4.2. Definición: public bool __unset ( string $name )
4.5. Sobrecarga de métodos
4.5.1. __call()
4.5.1.1. Lanzado al invocar un método inaccesible en un contexto de objeto
4.5.1.2. Definición: public mixed __call ( string $name , array $arguments )
4.5.2. __callStatic()
4.5.2.1. Lanzado al invocar un método inaccesible en un contexto estático
4.5.2.2. Definición: public mixed __call ( string $name , array $arguments )
5. Iteración de objetos
5.1. foreach
5.1.1. Recorre todas las propiedades visibles alas que se pueden acceder
5.2. Iterator
5.2.1. Interfaz que permite al objeto decidir cómo ser iterado y qué valores estarán disponibles en cada iteración
5.2.2. Ejemplo de definición: class MiIterador implements Iterator{...}
6. Métodos mágicos
6.1. Permiten realizar acciones en objetos cuando suceden determinados eventos que los activan
6.2. __sleep()
6.2.1. Definición: public array __sleep (void)
6.2.2. Confirma datos pendientes o realiza tareas similares de limpieza
6.2.3. Útil cuando se tienen objetos muy grandes que no necesitan guardarse por completo
6.2.4. Recoge un array de propiedades que queremos que se serialicen
6.3. __wakeup()
6.3.1. Definición: void __wakeup ( void )
6.3.2. Para restablecer las conexiones de base de datos que se puedan haber perdido durante la serialización y realizar otras tareas de reinicialización
6.3.3. Útil cuando se tienen objetos muy grandes que no necesitan guardarse por completo
6.3.4. Recoge un array de propiedades que queremos que se serialicen
6.4. __toString()
6.4.1. Definición: public string __toString (void)
6.4.2. Permite a una clase decidir cómo comportarse cuando se le trata como un string.
6.4.3. Debe devolver un string
6.5. __invoke()
6.5.1. Definición: mixed __invoke ([ $... ])
6.5.2. Permite usar un objeto como si fuera una función
6.6. _debugInfo()
6.6.1. Definición: array __debugInfo (void)
6.6.2. Invocado por var_dump al volcar un objeto para obtener las propiedades que deberían mostrarse
7. Palabra clave Final
7.1. Impide que las clases hijas sobrescriban un método
7.2. Ejemplo de definición: final public function nombreFuncion() {...}
8. Clonación de objetos
8.1. clone
8.1.1. Palabra clave para crear una copia de un objeto
8.1.2. Invoca al método __clone() del objeto, si es posible.
8.1.2.1. No se puede llamar al método __clone() de un objeto directamente
8.1.3. Definición: $copia_de_objeto = clone $objeto;
9. Comparación de objetos
9.1. ==
9.1.1. Operador de comparación
9.1.2. Compara de una forma sencilla las variables de cada objeto
9.2. ===
9.2.1. Operador de identidad
9.2.2. Las variables son idénticas sí además de coincidir los valores, también coinciden los tipos
10. Enlaces estáticos en tiempo de ejecución
10.1. Para hacer referencias a la clase en uso desde un contexto de herencia estática.
11. Serialización de objetos
11.1. serialize()
11.1.1. Permite almacenar o transmitir cualquier tipo de valor (excepto el tipo resource) en forma de String
11.1.2. Por ejemplo, permite guardar un objeto o array en una base de datos o transmitirlo entre aplicaciones remotas, para luego convertirlo a su tipo y estructura original
11.1.3. Ejemplo: $string = serialize($arr);
11.2. unserialize()
11.2.1. Para recuperar el valor original en PHP a partir de la cadena seriada
11.2.2. Ejemplo: $arr = unserialize($string);
12. Lo Básico
12.1. class
12.1.1. Palabra reservada para creación de clases
12.1.2. Ejemplo de definición: new Clase { }
12.1.3. Una clase contiene: constantes, funciones (métodos) y variables (propiedades)
12.1.4. Pseudovariable $this
12.1.4.1. Para hacer referencia al objeto invocador
12.2. new
12.2.1. Palabra reservada para instancia de una clase
12.2.2. Ejemplo de definición: $instancia = new Clase ();
12.2.3. new self, new parent
12.2.3.1. Para crear un nuevo objeto
12.3. Propiedades y métodos
12.3.1. Pueden tener el mismo nombre
12.3.2. Para llamar a propiedades: $obj -> bar
12.3.3. Para llamar a métodos: $obj -> bar()
12.4. extends
12.4.1. Palabra reservada para heredar métodos y propiedades
12.4.2. Ejemplo: class ClaseHeredada extends ClasePadre
12.4.3. parent::
12.4.3.1. Para acceder a métodos sobrescritos o propiedades estáticas
12.4.3.2. Ejemplo: parent:: mostrarVar()
12.5. ::class
12.5.1. También se usa la palabra reservada class para la resolución de nombres de clases
13. Propiedades
13.1. Se definen usando: public, protected o private
13.2. Ejemplo: public $var = 1 + 2;
13.3. ->
13.3.1. Para acceder a propiedades no estáticas
13.3.2. Ejemplo: $this -> propiedad
13.4. ::
13.4.1. Para acceder a propiedades estáticas
13.4.2. Ejemplo: self:: $propiedad
13.5. heredoc y nowdoc
13.5.1. Se pueden usar en cualquier contexto de datos estáticos, incluyendo la declaración de propiedades
13.5.2. heredoc
13.5.2.1. Se comporta como un string entre comillas dobles
13.5.2.2. Se define: <<< EOD ... EOD;
13.5.3. nowdoc
13.5.3.1. Se comporta como un string entre comillas simples
13.5.3.2. Se define: <<< 'EOD' ... EOD;
14. Constantes de clases
14.1. Se diferencian de las variables por no utilizar el símbolo $ al declararlas o emplearlas
14.2. El valor debe ser una expresión constante
14.3. Ejemplo de definición: const UNO= 1
14.4. Están asignadas una vez por clase, no por cada instancia de la clase
15. Autocarga de clases
15.1. Muchos desarrolladores crean un fichero fuente de PHP para cada definición de clase
15.2. spl_autoload_register()
15.2.1. Registra cualquier número de autocargadores
15.2.2. Posibilita que las clases e interfaces sean cargadas automáticamente si no están definidas
15.2.3. Ejemplo: spl_autoload_register(function ($nombre_clase) { include $nombre_clase . '.php'; });
15.3. __autoload()
15.3.1. Es empleada también para autocargar clases e interfaces; pero no es aconsejable utilizarla.
16. Constructores y Destructores
16.1. Constructores
16.1.1. function __construct()
16.1.2. No es invocado
16.1.3. Se dispara cuando se crea el objeto
16.1.4. Se suele utilizar para darle un valor a los atributos del objeto creado
16.1.5. parent::__construct()
16.1.5.1. Para ejecutar un constructor padre
16.2. Destructores
16.2.1. function __destruct
16.2.2. Son lo contrario a los constructores
16.2.3. Se disparan cuando el objeto se borra de memoria
16.2.4. No suelen utilizarse a menudo
17. Visibilidad
17.1. Para propiedades, métodos o constantes.
17.2. public
17.2.1. Se puede acceder a los miembros de la clase desde donde sea.
17.2.2. Ejemplo: public $publica = 'ejemplo'
17.3. protected
17.3.1. Solo se puede acceder desde la misma clase o mediante clases heredadas.
17.3.2. Ejemplo: protected $protegida = 'ejemplo'
17.4. private
17.4.1. Únicamente se puede acceder desde la clase que los definió.
17.4.2. Ejemplo: private $privada = 'ejemplo'
18. Herencia de objetos
18.1. Principio que afecta la manera en la que se relacionan las clases y objetos
18.2. Cuando se extiende una clase, la subclase hereda todos los métodos públicos y protegidos de la clase padre
18.3. Útil para la definición y abstracción de la funcionalidad
18.4. Implementación de la funcionalidad adicional en objetos similares
19. Operador de Resolución de Ámbito (::)
19.1. Denominado en términos simples "doble dos-puntos"
19.2. Permite acceder a elementos estáticos, constantes
19.3. Permite sobrescribir propiedades o métodos de una clase
19.4. self, parent y static
19.4.1. Palabras claves especiales para acceder a propiedades y métodos desde el interior de la definición de la clase
20. Palabra reservada 'static
20.1. Para definir métodos y propiedades estáticos
20.1.1. Los hace accesibles sin la necesidad de instanciar la clase
20.1.2. Métodos estáticos
20.1.2.1. $this no está disponible dentro de los métodos estáticos
20.1.2.2. Ejemplo: public static function unMetodoEstatico() { // ... }
20.1.3. Propiedades estáticas
20.1.3.1. No se puede acceder a ella a través del objeto utilizando ->
20.1.3.2. Sólo pueden ser inicializadas utilizando un string literal o una constante
20.1.3.3. Ejemplo: public static $mi_static = 'foo';
20.2. Para definir variables estáticas
20.3. Para enlaces estáticos en tiempo de ejecución
21. Abstracción de clases
21.1. Las clases abstractas no se pueden instanciar
21.2. Los métodos abstractos declaran la firma del método, pero no puede definir la implementación
21.3. Al heredar...
21.3.1. Todos los métodos abstractos deben ser definidos en la clase hija con la misma visibilidad
21.3.2. Las firmas de los métodos tienen que coincidir