- POO: Finalidad de la herencia y conceptos básicos
- POO en PHP: Propiedades y métodos estáticos
- POO en PHP: Ámbito de propiedades y métodos
- POO en PHP: Propiedades de una clase
- POO en PHP: Métodos en las clases
- Programación orientada a objetos en PHP: Introducción
- Programación orientada a objetos en PHP: Clases y objetos
En el post anterior de la serie hablé sobre la programación orientada a objetos y cómo funciona. En este post se entrará más en profundidad al hablar de las clases y objetos. Voy a mostrar cómo declarar una clase y como crear (instanciar) un objeto a través de una clase ya declarada.
Declaración de clases
Antes de poder usar un objeto es preciso declarar una clase, para ello se emplea la keyword class. Una clase se compone de un nombre (distingue mayúsculas), propiedades/atributos y métodos.
1 2 3 4 5 6 7 8 9 10 11 |
<?php class Coche { public $marca, $modelo; function arrancar() { echo "El coche acaba de arrancar"; } } ?> |
En este caso declaramos la clase coche que tiene como atributos marca y modelo y un método que es arrancar().
Crear un objeto
Una vez que la clase está definida, podremos crear un objeto. Normalmente este proceso se conoce como instanciar. Hay 2 formas, una de ellas sería que una variable sea un objeto, el cual en un futuro podremos asignarle las propiedades y llamar a sus métodos.
1 |
$objeto = new Coche; |
La otra sería especificando las propiedades/atributos del objeto aunque para este método sera preciso un constructor, el cual hablaré en el post siguiente.
1 |
$coche = new Coche('Mazda', 'Rx-7'); |
Acceder a un objeto
Ahora que tenemos las clases instanciadas, podremos acceder a sus propiedades y métodos. Por ejemplo, para el primer caso podemos asignarle los atributos y usar su método.
1 2 3 4 5 6 7 8 9 |
$objeto = new Coche; $objeto->marca = "Ford"; $objeto->modelo = "Mustang GT"; //Se muestran las propiedades print_r($objeto); echo "<br>"; $objeto->arrancar(); |
Como puedes ver, para acceder tanto a propiedades como métodos es preciso usar $objeto->atributo o $objeto->método(). Es importante que a la hora de acceder un atributo de una clase, el atributo no lleve $ sino no funcionará.
Cuando declares una clase, es indiferente donde la coloques ya sea antes o después de crear un objeto pero, es una buena práctica que las clases estén al final del archivo.
Clonar objetos
Como sucede en otros lenguajes de programación como en Java, para clonar un objeto no funciona lo siguiente
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php $persona1 = new Persona(); $persona1 ->nombre = "Luis"; $persona2 = $persona1 ; $persona2 ->nombre = "Alicia"; echo "persona1 = " . $persona1 ->nombre . "<br>"; echo "persona2 = " . $persona2 ->nombre; class Persona { public $nombre; } ?> |
Esto devolvería
1 2 |
persona1 = Alicia persona2 = Alicia |
Esto se debe a que en este caso no copias un objeto como sucedería con el valor de una variable sino que pasas la referencia del objeto. De esta manera tanto persona1 como persona2 apuntan al mismo objeto, de ahí que cuando se cambie el nombre de persona2 se vea afectado también persona1, el objeto original.
Pero no pasa nada, PHP proporciona una manera de clonar un objeto y es mediante la keyword clone. Si modificamos la primera parte del código.
1 2 3 4 5 |
$persona1 = new Persona(); $persona1 ->nombre = "Luis"; $persona2 = clone $persona1 ; $persona2 ->nombre = "Alicia"; |
Debería de dar como resultado
1 2 |
persona1 = Luis persona2 = Alicia |
Y hasta aquí lo una parte sobre clases y objetos, espero que os sea útil. A seguir picando 🙂