0% encontró este documento útil (0 votos)
77 vistas43 páginas

PHP Semana 08 OK v4

Este documento describe conceptos básicos de programación orientada a objetos en PHP como clases, objetos, atributos, métodos, constructores y destructores. Explica cómo definir una clase con sus campos y métodos, así como crear objetos de una clase usando el operador new. También cubre temas como visibilidad de atributos y métodos, el uso de constructores para inicializar objetos, y más.

Cargado por

Roy Saavedra
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
77 vistas43 páginas

PHP Semana 08 OK v4

Este documento describe conceptos básicos de programación orientada a objetos en PHP como clases, objetos, atributos, métodos, constructores y destructores. Explica cómo definir una clase con sus campos y métodos, así como crear objetos de una clase usando el operador new. También cubre temas como visibilidad de atributos y métodos, el uso de constructores para inicializar objetos, y más.

Cargado por

Roy Saavedra
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 43

Temas a desarrollar:

• Definición de una clase, campos y Métodos


• Constructores y Destructores
1. Clase
1.1 Definición de una clase
Una clase define un tipo de objeto en particular.
Por ejemplo, en un sistema de ventas la clase Factura define a todas las
Facturas que la empresa emite.
Su sintaxis es:
[ModificadorClase] Class NombreClase{
//Campos
//Métodos
}
El ModificadorClase puede tomar los valores que se resumen en el
Siguiente cuadro:
Palabra Clave Descripción
abstract Define una clase como abstracta, quiere decir que no se podrán crear instancias de
clase defina como abstracta
final Si una clase define como final, entonces no podrá ser extendida quiere decir que no
Se podrán crear subclases desde una clase final.
Ejemplo 1 1.2 Representación UML de una Clase
Class Factura{ Para tener una representación grafica de una
//campos Clase se utiliza UML(Unifed Modeling
private $numero Languaje), tal como se ilustra en la Figura:
private $importe
Factura Nombre de la Clase
//Metodos - numero Atributos(campos en PHP)
Public function grabar(…){ - importe
+ grabar() Operaciones(metodos en PHP)

… Representación UML de una Clase

}//Factura
1.3 Creación de Objetos:
El operador new se utiliza para crear un objeto de un tipo de clase
Especifica, es decir, que asigne memoria para el objeto.
Para utilizar el operador new tenemos dos sintaxis:
Sintaxis 1
private $nombreDeVariable;
$nombreDeVariable = new NombreDeClase()
En la primera instrucción se define la variable que apuntara a un
Objeto que se crear en la segunda instrucción.
Sintaxis 2
private $nombreDeVariable = new NombreDeClase();
En este caso, tanto la creación de la variable y la creación del objeto se
Realizan en la misma instrucción.
Instrucción Efecto
$fact1 = null; $fact1
[null]

$fact1 fact1: Factura


$fact1 = new Factura();
[……]
- Numero:567
- Importe:456.34
Instanciación de una Clase(creación de un objeto) + grabar()
1.4 Asignación de Objetos
Cuando creamos un objeto internamente, existe un puntero al que no
Tenemos acceso, pero cuando asignamos objetos, lo que realmente
Estamos asignando son las direcciones de memoria donde están
Definidos los objetos, como se explica la figura:
$fact1 = new Factura();

$fact2 = $fac1;
$fac1;
fact1: Factura
- Numero:567
$fact2 - Importe:456.34
+ grabar()

Asignación de Objetos
2. Trabajando con campos
2.1 Definición
Los campos definen los datos de un objeto; cuando definimos un campo
Debemos declararlo y establecer su visibilidad.
La visibilidad determinara desde que parte del código se puede acceder
al campo.

Sintaxis:
[TipoAcceso][ModificadorCampo] $nombreCampo[=ValorInicial];
El TipoAcceso puede tomar los valores que se resumen en el siguiente cuadro:
Palabra Clave Descripción UML
public Indica que el campo es de acceso publico. El acceso se realiza a través de una +
instancia del objeto.
protected Indica que solo se puede acceder al campo desde métodos de la #
Misma clase y clases derivadas(subclases)
private Indica que solo se puede acceder al campo desde métodos de la -
misma clase.

El ModificadorCampo puede tomar los valores que se resumen en el siguiente


cuadro:
Palabra Clave Descripción
static El campo pertenece a la clase, no a los objetos creados a partir de ella.

El ValorInicial permite inicializar la variable con un valor.


De acuerdo a la forma en que se especifica un atributo, objetos de otras clases
Tiene distintas posibilidades de accederlos, tal como se resumen en el
Siguiente cuadro:
Acceso Desde private protected public
La propia clase SI SI SI
SubClase NO SI SI

2.2 Ocultando los datos


Uno de los fundamentos de la programación orientada a objeto es que
El usuario solo debe tener acceso a los datos que son de su interés, y
Del modo que le corresponde, por ejemplo solo lectura, solo escritura,
o ambos.
Para conseguir esto se deben declarar los atributos como privados, y se deben
Implementar métodos para acceder a ellos. Existe un estándar para definir estos
Métodos, por ejemplo, si el campo es $nombre los métodos son:

setNombre() Este método permite asignar un valor al campo.


getNombre() Este método permite leer el valor del campo.

Como puede apreciar, existen dos prefijos, el prefijo set que se utiliza para asignar un valor al campo
y el prefijo get, para leer el valor del campo; de esta manera, podemos seleccionar si se implementa
el método set, get o ambos y restringir el nivel de acceso a los datos.

Otra posibilidad que nos da la implementación de estos métodos es de poder agregar funcionalidad
que puede servir para verificar, por ejemplo, si el dato Que se esta asignando es correcto o no.
Ejemplo 2:
En este ejemplo se ilustra el uso de los métodos set y get:

Como puede apreciar en el código,


El método setNumero() se utiliza
Para asignar un valor a campo
$numero, mientras que el método
getNumero() se utiliza para leer su
valor.

Es posible agregar lógica en cualquiera


de los dos métodos, o ambos si el caso
lo amerita.
3. TRABAJANDO CON METODOS
3.1 DEFINICION
Los métodos definen el comportamiento de un objeto de una clase concreta y
Tienen las siguientes características:
• Agrupan las responsabilidades del objeto(competencias)
• Describen sus acciones

Las acciones realizada por un objeto son consecuencia directa de un estimulo


Externo(un mensaje enviado desde otro objeto) y dependen del estado del objeto.

El estado y comportamiento de un objeto están relacionados. Por ejemplo, un


avión no puede aterrizar(acción) sino esta en vuelo(estado).
SINTAXIS
[TipoAcceso][ModificadorMetodo]
Function NombreMetodo([ListadeParametro]){
//cuerpo de método
[return expresión;]
}
El TipoAcceso puede tomar los valores que se resumen en el siguiente cuadro:

Palabra Clave Descripción UML

public Indica que el método es de acceso publico. El acceso se realiza a travez de una +
instancia del objeto
protected Indica que solo se puede acceder al método desde métodos de la misma clase y #
clases derivadas(subclases)
private Indica que solo se puede acceder al método desde métodos de la misma clase -

sin especificar Por defecto, se asume que el nivel de acceso es publico


El Modificador Método puede tomar los valores que se resumen en el siguiente cuadro:

Palabra Clave Descripción

tatic El método pertenece a la clase, no a los objetos creados a partir de ella.

final El método es definido como método definitivo, esto quiere decir que no se puede
redefinir en una subclase.
abstract Determina que el método no se implementa en la clase, su implementación será
en las clases heredadas o subclases

Los parámetros son opcionales, pero sin son necesario se deben especificar siguiendo las reglas
estudiadas para los parámetros de las funciones de usuario.
Solo para el caso en que el parámetro sea un objeto se debe especificar el tipo de objeto(Clase),
Esto se conoce como Type Hinting; se utiliza la siguiente sintaxis:

nombreMetodo(nombreClase $parámetro,…)
Los parámetros son variables que reciben valores de los argumentos que se le pasa al método
cuando este es invocado.
Los métodos que necesitan retornar un valor a la instrucción que realiza la llamada deben utilizar
La instrucción return; a continuación tenemos su sintaxis:
return expresión;
Donde expresión representa el valor que retorna el método:

Recuperado de: https://jadcode.wordpress.com/2015/03/16/uml-y-diagramas-de-clases/


Recuperado de: https://es.slideshare.net/felix17/conceptos-basicos-uml
1. CONSTRUCTORES
1.1. DEFINICION E IMPLEMENTACION
Cuando se crea un objeto(se instala una clase) es posible definir un proceso de inicialización que prepare
El objeto para ser usado. Esta inicialización se lleva a cabo invocando un método especial denominado
Constructor. Esta invocación se realiza cuando se utiliza el operador new.

Los constructores tienen algunas características especiales:


- El nombre del contructor es __construct
- Puede recibir argumentos como cualquier otro método.

El constructor no es un miembro mas de una clase. Solo es invocado cuando se crea el objeto con el
Operador New. No puede invocarse explícitamente en ningún otro momento.

[TipoAcceso] function __construct([Lista de parámetros]){


//Implementación
}
En la figura tenemos la representación UML del constructor de una clase, la palabra void significa que no retorna
ningún valor.

A continuación, tenemos su implementación

Class Demo{
//constructores
Public __construct(){
//Implementacion
}
//Implementacion de la clase

Representación UML del constructor de una clase }


}//Clase Demo
Al crear un objeto con el operador new se ejecuta el constructor:
$objeto=new Demo();

Los constructores padres no son llamados implícitamente si la clase hija define un constructor.
Para poder ejecutar el constructor de la clase padre, se debe una llamada a parent::___
contruct() dentro del constructor de la clase hija.

Ejemplo 1:
Se necesita una clase para realizar operaciones con una base de datos MYSQL, es requisito que
En el instante de crear el objeto se conecte con la base de datos automáticamente.

Se utilizara la base de datos de recursos humanos(rh) para ilustrar el ejemplo y se construirá un


método que permita ejecutar una consulta.
La solución para este requerimiento es hacer una clase que es un constructor realice la conexión con
la base de datos; la representación UML, se muestra:

Representación UML de la clase Base de datos


A continuación, tenemos su
Implementación:
Para probar la clase BaseDatos
Utilizaremos el siguiente programa:
1.2 SOBRECARGA DEL CONSTRUCTOR
PHP no implementa la sobrecarga, pero podemos simularla.

Supongamos que en la clase BaseDatos del Ejemplo1 queremos tener dos opciones, que describen
A continuación:
1. – En la primera opción queremos ejecutar el constructor sin parámetro, en cuyo caso asumirá
datos por defecto.

2 . - En la segunda opción queremos pasarle los parámetros de conexión.


Para tener estas dos posibilidades definimos el constructor con los parámetros de conexión pero
con valores por defecto, y cuando creamos el objeto utilizando el operador new podemos pasar
o no parámetros,
El nuevo constructor quedara así:
Podemos instanciar la clase BaseDatos de la siguiente manera:
$bd = new BaseDatos();

o de esta otra:

$bd=new BaseDatos(“localhost”,”root”,”admin”)
2. DESTRUCTORES
Un destructor es un método especial que es ejecutado cada vez que se destruye(se elimina de la RAM)
Un objeto.
Es de visbilidad publica(public), no tiene parámetros, ni valor de retorno y se utiliza para liberar
Recursos utilizados por el propio objeto.

Su sintaxis es:
[public] function __destruct(){
//Implementacion
}

El método destructor será llamado tan pronto como todas las referencias a un objeto en particular
Sean removidas, cuando el objeto sea explícitamente destruido, o cuando finalice la ejecución del
Programa.

Como sucede con el método constructor, el método destructor de la clase padre no será llamado
Implícitamente. Para ejecutar un destructor padre, se debe hacer una llamada explicita a parent::__
destruct() en el cuerpo del destructor.
- Para destruir un objeto explícitamente debe utilizar la función unset()
- Intentar disparar una excepción desde un destructor(llamada durante la finalización del script)
produce un error fatal.

Esperar a que el mismo sistema ejecute el método destructor para que se liberen los recursos
Utilizados por el objeto puede resultar muy costoso. Por ejemplo, en la clase BaseDatos del ejemplo
1 podrías tener la conexión con la base de datos activa por mucho tiempo causando problemas
De acceso a otros usuario.

Es posible implementar un método publico para que sea invocado cada vez que se necesite liberar
Recursos utilizados por el objeto; muchas veces este métodos es llamado dispose.
A continuación, tenemos la representación UML de los métodos constructor, destructor y dispose
para una clase:

Representación UML de los métodos __construct, destruct y dispose


Ejemplo 2
Se necesita implementar los métodos __destruct y dispose de la clase BaseDatos del ejemplo.

La representación UML se muestra:

La representación UML de la clase BaseDatos


A continuación, tenemos su codificación:
A continuación, tenemos su codificación:
3. INTRODUCCION
ALCANCE DE INSTANCIA

Son campos y métodos que necesitan ser invocados por una instancia, es decir, por un
Objeto, ya que se crear en el objeto.

$nombreObjeto nombreCampo
$nombreObjeto nombreMetodo(…)

ALCANCE DE CLASE
Son campos y metodos que no requieren crear una instancia(objeto) para ser invocados,
Basta con anteponer el nombre de la clase, ya que se encuentran en la clase y no en el
Objeto.

NombreClase::nombreCampo
NombreClase::nombreMetodo(…)
En la programación orientada a objetos se les conoce como campos y métodos estadísticos(static)
En el caso de ser un campo estático mantiene su valor para cada instancia de la clase, de ser
publico el campo podemos acceder incluso desde cualquier otra clase.

IMPLEMENTACION
Su sintaxis para los campos es:

[private|public|protected] static $nombreCampo[=valor];

Su sintaxis para los metodos es:

[private|public|protected] static $nombreMetodo([parametros){

//Implementacion

}
La presencia de la palabra clave static determina que la declaración tiene alcance de clase.

Cuando se crea una instancia de la clase, no se crear copias de las variables estáticas; en vez
de ello, todas las instancias comparten las mismas variables estáticas, es decir el valor
es compartido.

Los métodos de clase solo pueden acceder a campos y métodos de clase y no a campos y
Métodos de instancia; no se puede usar la palabra clave $this en un método estático.

A continuación, tenemos la representación UML de una clase con campos y métodos de instancia
y clase.

Alcance de instancia y de clase


A continuación, tenemos su implementación:
ALCANCE DE INSTANCIA
Para acceder a los miembros de instancia desde la misma clase se debe utilizar la variable $this
siguiendo la siguiente sintaxis:

$thisnombreCampo
$thisnombreMetodo(…)

Fuera de la clase debemos utilizar la variables que hace referencia al objeto, por ejemplo si
intanciamos
La clase Demo

$obj=new Demo();

Para acceder a sus miembros de instancia debe utilizar la siguiente sintaxis:


$objnombreCampo
$objnombreMetodo(…)
ALCANCE DE CLASE
Para acceder a los miembros de clase desde la misma clase se debe utilizar la palabra
clave self siguiendo la siguiente sintaxis:

Self::$nombreCampo
Self::nombreMetodo(…)

Desde fuera de la clase debemos utilizar el nombre de la clase siguiendo la siguiente


Sintaxis:

NombreClase::$nombreCampo
NombreClase::$nombreMetodo(…)
CONSTANTES DE CLASE
Es posible definir valores constantes en una clase. Las constantes se diferencian de las variables
En que se usa el símbolo dólar $ para declararlas o usarlas.

Sintaxis:
const NOMBRE=valor;

Ejemplo:
const PROVEEDOR = “PeruDev”;
Su compartimiento es similar a los campos de clase(estaticos) con visibilidad public, quiere
Decir que para acceder a la contantes desde la misma clase utilizar la palabra clave self y fuera
De la clase debemos utilizar el nombre de la clase.

Como los miembros estáticos, a los valores constantes no se puede acceder desde una
Instancia de la clase donde se define.

El valor debe ser una expresión constante, no puede ser una variable, un miembro de una clase
Resultado de una operación matemática ni la llamada a una función.

También podría gustarte