PHP Semana 08 OK v4
PHP Semana 08 OK v4
}//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]
$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.
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:
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 -
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:
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.
Class Demo{
//constructores
Public __construct(){
//Implementacion
}
//Implementacion de la clase
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.
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.
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:
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:
//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.
$thisnombreCampo
$thisnombreMetodo(…)
Fuera de la clase debemos utilizar la variables que hace referencia al objeto, por ejemplo si
intanciamos
La clase Demo
$obj=new Demo();
Self::$nombreCampo
Self::nombreMetodo(…)
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.