Diferencia entre revisiones de «Plantilla:PHP/SintasixPHPOOP 1»
De WikiEducator
(→OPP En php) |
(→Pilares básicos de la POO) |
||
(6 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 23: | Línea 23: | ||
^[a-zA-Z_][a-zA-Z0-9_]*$ | ^[a-zA-Z_][a-zA-Z0-9_]*$ | ||
*El nombre de las clases se recomienda que empiece por mayúsculas | *El nombre de las clases se recomienda que empiece por mayúsculas | ||
− | *Es recomendable guardar las clases en ficheros cuyo nombre sea el propio de la clase | + | *Es '''''recomendable''''' guardar las clases en ficheros cuyo nombre sea el propio de la clase |
</div> | </div> | ||
− | {{ | + | ====Los atributos==== |
+ | *Para definir los atributos hay que especificar antes del nombre su visibilidad | ||
+ | *Establece si ese atributo puede ser accedido o no fuera de la clase | ||
+ | *Tenemos tres tipos de visibilidad | ||
+ | ;private | ||
+ | Solo se puede acceder al atributo dentro de la propia clase | ||
+ | ;public | ||
+ | Se puede acceder al atributo en cualquier sitio donde esté el objeto | ||
+ | ;protected | ||
+ | Solo se puede acceder al atributo dentro de la propia clase y de las clases que hereden de ella (ya lo veremos en herencia). | ||
+ | {{MRM_Puntos clave|Title=Importante la visibilidad| | ||
*Veremos más adelante la visibilidad | *Veremos más adelante la visibilidad | ||
*En php es '''''obligatorio''''' especificar la visibilidad de los atributos | *En php es '''''obligatorio''''' especificar la visibilidad de los atributos | ||
Línea 35: | Línea 45: | ||
<div class="slide"> | <div class="slide"> | ||
− | |||
− | |||
− | |||
− | |||
{{Tip|A continuación un posible código iremos viendo más adelante muchos detalles sintácticos aquí expresados}} | {{Tip|A continuación un posible código iremos viendo más adelante muchos detalles sintácticos aquí expresados}} | ||
+ | {{MRM_Ejemplo|Crea una claser '''''Fecha''''' con tres atributos }} | ||
<source lang =php> | <source lang =php> | ||
<?php | <?php | ||
− | |||
class Fecha { | class Fecha { | ||
private $dia; | private $dia; | ||
Línea 49: | Línea 55: | ||
private $year; | private $year; | ||
+ | }} | ||
+ | </source> | ||
+ | <br /> | ||
+ | <!-- | ||
/** | /** | ||
* | * | ||
Línea 85: | Línea 95: | ||
*Y la salida que se produce | *Y la salida que se produce | ||
La fecha es 10/12/2016 | La fecha es 10/12/2016 | ||
− | + | ||
− | + | ||
*Iremos entendiendo cada parte de esta declaración y uso a lo largo del tema | *Iremos entendiendo cada parte de esta declaración y uso a lo largo del tema | ||
+ | --> | ||
</div> | </div> | ||
<div class="slide"> | <div class="slide"> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</div> | </div> | ||
<div class="slide"> | <div class="slide"> | ||
+ | ====Los métodos==== | ||
+ | *Pero solo los atributos no sirven de nada | ||
+ | *Cuando nosotros usemos un objeto de la clase fecha, necesitamos que ese obeto exista, que sea una fecha concreta | ||
+ | *Necesitamos un comportamiento para las clases, es decir, que sepan hacer cosas, para esto están los métodos, que son funciones que vamos a tener en nuestra clase. | ||
+ | =====El constructor ===== | ||
+ | *Una acción básica el la que se ejecuta cuando construimos o declaramos un objeto de una clase | ||
+ | *Este método se conoce como constructor, y se ejecuta de forma implícita (no hay que invocarlo de manera explícita | ||
+ | *En php este método se llama '''''__construct(...)''''' y le podemos pasar los parámetros que consideremos | ||
+ | {{MRM_Puntos clave|En php los métodos que se ejecutan cuando ocurre algo que no sea invocarlos se llaman '''''métodos mágicos'''''}} | ||
+ | {{Tip|'''''__construct()''''' es un método mágico que se ejecuta cuando instancio un objeto de una clase}} | ||
+ | {{Tip| Todos los métodos mágicos, ya están definidos por el sistema y empiezan por dos caracteres de subrayado '''''__'''''}} | ||
− | ==== | + | <source lang=php> |
− | * | + | public function __construct($d, $m, $y) { |
− | + | $this->dia = $d; | |
− | {{ | + | $this->mes = $mes; |
− | + | $this->year = $year; | |
− | + | } | |
+ | </source> | ||
+ | *Fíjate en el operador (seudovariable) $this, hace referencia al objeto actual, el que esté en memoria | ||
+ | {{MRM_Pregunta| | ||
+ | Qué pasaría si pusiera $dia en lugar de $this->dia | ||
}} | }} | ||
− | |||
− | |||
− | + | ;Ver los valores de los atributos | |
− | + | *Para ello podemos crear un método ver_fecha | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | ; | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | * | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | *Para ello vamos a implementar el método mágico '''''__toString()''''' | |
− | + | *Este método no adminte parámetros | |
+ | *Tiene que devolver un string | ||
+ | *Se invoca siempre que queramos convertir un objeto en cadena de caracteres | ||
+ | * | ||
+ | *Para esto, inicializar el objeto, tenemos | ||
=== Declarando objetos: Operador '''''new'''''=== | === Declarando objetos: Operador '''''new'''''=== |
Última revisión de 03:26 26 mar 2019
Los atributos
- Para definir los atributos hay que especificar antes del nombre su visibilidad
- Establece si ese atributo puede ser accedido o no fuera de la clase
- Tenemos tres tipos de visibilidad
- private
Solo se puede acceder al atributo dentro de la propia clase
- public
Se puede acceder al atributo en cualquier sitio donde esté el objeto
- protected
Solo se puede acceder al atributo dentro de la propia clase y de las clases que hereden de ella (ya lo veremos en herencia).
|
- Otro ejemplo importante son los métodos __toString() y __call($function, $paramters)
__toString()
| |
class Racional { //put your code here private $num; private $den; public function __construct($num, $den){ $this->num = $num; $this->den = $den; } public function __toString(){ return ("$this->num/$this->den"); } } $r1 = new Racional (8,5); echo "Valor del objeto r1 = $r1"; ?>
Valor del objeto r1 = 8/5
|
1.- $metodo es el nombre del método invocado 1.- $parametros es un array indexado con la lista de los parámetros con los que invocamos a la función |
uso de __call($metodo, $parametros )
| |
class Racional { //put your code here private $num; private $den; public function __construct($num, $den){ $this->num = $num; $this->den = $den; } public function __call($funcion, $argumentos){ echo "<h2>Has invocado a un método que no existe en esta clase </h2>"; echo "Nombre de la función <strong>$funcion</strong><br />"; echo "Lista de parámetros<br />"; foreach ($argumentos as $param => $valor){ echo "parámetro <strong>$param</strong> = <strong>".print_r($valor, true). "</strong> <br />"; //Poner en print_r el segundo parámetro a true, //hace que esa función en lugar de imprimir, retorna el valor. } } } } $r1 = new Racional(5,4); $r1->metodoInventado1(5,4,5,6,7); $r1->otroMetodoSinParametros(); $r1->otroMetodo([1,2,3],"parametro2", 5,"ultimo parametro"); ?>
|