Diferencia entre revisiones de «Plantilla:PHP/SintasixPHPOOP»
De WikiEducator
(→Acceso al contenido del objete : -> y ::) |
|||
Línea 368: | Línea 368: | ||
}} | }} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
===Propiedades=== | ===Propiedades=== | ||
*Al igual que en el código estructurado los valores que almaceno en memoria, las propiedades de los objetos pueden ser. | *Al igual que en el código estructurado los valores que almaceno en memoria, las propiedades de los objetos pueden ser. | ||
Línea 419: | Línea 377: | ||
*A una constante hay que asignarle un valor no pudiendo asignar expresiones. | *A una constante hay que asignarle un valor no pudiendo asignar expresiones. | ||
*Todos los objetos de la misma clase comparte el valor de la constante. Por lo que se tomará como un valor estático. | *Todos los objetos de la misma clase comparte el valor de la constante. Por lo que se tomará como un valor estático. | ||
+ | *Antes de la versión 7.1, incluyendo la 7.0, las constantes siempre eran públicas | ||
+ | *A partir de la versión 7.1 se puede especificar la visibilidad (public, protected o private) | ||
</div> | </div> | ||
Línea 424: | Línea 384: | ||
<div class="slide"> | <div class="slide"> | ||
;Accediendo al valor de una constante | ;Accediendo al valor de una constante | ||
− | + | 1.- Dentro de la clase: | |
− | + | *Operador [[#self|'''''self''''']] junto con el '''''[[#::|operador de resolución de ámbito ::''''']] | |
+ | *Nombre de la clase | ||
+ | 2.- En el programa: | ||
+ | *Nombre de la clase | ||
+ | *Nombre de cualquier objeto de la clase | ||
+ | **En ambos casos, junto con el operador de resolución de ámbito '''''::''''', seguido del identificador de la constante. | ||
*Vemos un ejemplo de su uso | *Vemos un ejemplo de su uso | ||
<source lang=php> | <source lang=php> | ||
Línea 449: | Línea 414: | ||
<!--1 --> | <!--1 --> | ||
<div class="slide"> | <div class="slide"> | ||
− | |||
</div> | </div> | ||
<div class="slide"> | <div class="slide"> | ||
;Variables | ;Variables | ||
− | *Estas propiedades | + | *Estas propiedades son como las variables pero de la clase. |
− | * | + | *Siguen la misma regla de construcción que vistas anteriormente. |
*Las propiedades de la clase al igual que los métodos se les puede especificar una determinada [[#visibilidad]] o alcance, siendo el valor por defecto '''''public'''''. | *Las propiedades de la clase al igual que los métodos se les puede especificar una determinada [[#visibilidad]] o alcance, siendo el valor por defecto '''''public'''''. | ||
− | *También puedes ser [[#static]] o estáticas | + | *También puedes ser [[#static]] o estáticas;Este especificador establece que estos elementos sean conocidas como propiedades o métidos de la clase, si se especifica con la palabra reservada '''''[[#static]]'''''. |
− | + | ||
− | * | + | {{Tip| Es importante recordar que para acceder dentro de la clase a los métodos o propiedades de ella, hay que usar la seudovariable '''''[[#$this]]''''}} |
+ | |||
+ | *Esto es debido a que php es de tipado dinámico, si no lo hiciéramos estaríamos accediendo a una variable local al método | ||
+ | {{Tip|Recordar que en este caso no podremos el '''''$''''' delante del nombre de la propiedad.}} | ||
</div> | </div> | ||
<div class="slide"> | <div class="slide"> | ||
Línea 486: | Línea 453: | ||
*Es lo que el objeto va a saber hacer dentro del programa | *Es lo que el objeto va a saber hacer dentro del programa | ||
*Los métodos de detallan usando la palabra reservada '''''function''''' | *Los métodos de detallan usando la palabra reservada '''''function''''' | ||
− | *En php dentro de la programación orientada a objetos tenemos una serie o tipo de métodos que | + | *En php dentro de la programación orientada a objetos tenemos una serie o tipo de métodos que es muy importante conocer y se llaman [[#métodos mágicos]], que posteriormente estudiaremos. |
+ | *Los métodos mágicos son métodos de la clase que son invocados de manera implícita cuando ocurre alguna circunstancia concreto. | ||
+ | *Por ejemplo como vamos a ver en el párrafo siguiente, cuando se instancia un objeto se invoca (si está implementado), al método mágico __construct. a continuación se explica. | ||
</div> | </div> | ||
+ | |||
<div class="slide"> | <div class="slide"> | ||
Línea 493: | Línea 463: | ||
*En php, al igual que ocurre en Java, podemos tener un método con el mismo nombre que la clase. | *En php, al igual que ocurre en Java, podemos tener un método con el mismo nombre que la clase. | ||
*Cuando instanciamos un objeto de una determinada clase, si existe este método se ejecuta y podríamos entenderlo como constructor de la clase. | *Cuando instanciamos un objeto de una determinada clase, si existe este método se ejecuta y podríamos entenderlo como constructor de la clase. | ||
− | *Pero realmente el constructor corresponde a un [[#método mágico]] llamado '''''__construct()''''que es invocado y ejecutado siempre que se instancie un nuevo objeto de la clase. En este caso no se ejecutará el método con el nombre de la case si es que existiera. | + | *Pero realmente el constructor corresponde a un [[#método mágico]] llamado '''''__construct()''''que es invocado y ejecutado siempre que se instancie un nuevo objeto de la clase (si lo hemos escrito en la clase). En este caso no se ejecutará el método con el nombre de la case si es que existiera. |
− | *El igual que tenemos un método que se ejecuta cuando instanciamos un objeto de la clase, existe otro [[#método mágico]] que se ejecuta siempre que se | + | *El igual que tenemos un método que se ejecuta cuando instanciamos un objeto de la clase, existe otro [[#método mágico]] que se ejecuta siempre que se destruya una instancia de una clase u objeto, y es el método '''''__destruct()''''' |
− | *Las | + | *Las implementaciones de estos dos métodos, lógicamente son libre para cada clase, |
− | *Su invocación es transparente para el programador (esto es | + | *Su invocación es transparente para el programador (esto es cómo ocurre en todos los [[#métodos mágicos]] y se realiza siempre respectivamente al crear el objeto, y cuando este es destruido, |
*En el caso de '''''__construct''''', podemos pasarle argumentos, que serían los valores que aportamos al construir un objeto de la case | *En el caso de '''''__construct''''', podemos pasarle argumentos, que serían los valores que aportamos al construir un objeto de la case | ||
</div> | </div> | ||
<div class="slide"> | <div class="slide"> | ||
+ | |||
+ | |||
+ | |||
+ | |||
;[[#métodos mágicos]] | ;[[#métodos mágicos]] | ||
Línea 1086: | Línea 1060: | ||
==::== | ==::== | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ============================================================== | ||
+ | ===Herencia=== | ||
+ | *La herencia es un mecanismo por el cual puedo definir una clase con ciertas características (atributos, métodos) | ||
+ | *Posteriormente puedo definir otra clase a partir de la ya existente incorporándo implícitamente las características de la primera | ||
+ | *Es una característica muy natural (p.e Personas (médicos y bailarines) vehículos (Terrestres (coche, moto) Acuáticos (barco, lancha)) | ||
+ | [[Archivo:Herencia.png]] | ||
+ | *Es una forma de obtener características comunes por separado y luego especializar evitando redundancias | ||
+ | *Facilita la reusabilidad y adaptación | ||
+ | *Vamos a platear un ejemplo | ||
+ | |||
+ | {{}} | ||
+ | |||
+ | ===Métodos abstractos=== | ||
+ | <!-- | ||
+ | *Son métodos que no tienen código | ||
+ | *Sirven para estructurar nuestra clase | ||
+ | {{MRM_Ejemplo| | ||
+ | *Definimos la clase polígono | ||
+ | *Es una estrucut | ||
+ | abstract class Poligono { | ||
+ | //put your code here | ||
+ | |||
+ | protected $lados; | ||
+ | protected $area; | ||
+ | |||
+ | public function __construct ($lados){ | ||
+ | $this->lados = $lados; | ||
+ | } | ||
+ | |||
+ | |||
+ | abstract public function calculaArea(); | ||
+ | |||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | }} | ||
+ | |||
+ | |||
+ | Puedo heredar un método y añadir cosas (MRM Falta ejemplo) | ||
+ | --> | ||
<!-- Dejo esto aquí a ver si lo completo o no | <!-- Dejo esto aquí a ver si lo completo o no |
Revisión de 11:08 30 nov 2016
Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos. Ver página de charlas. |