Professional Documents
Culture Documents
Clases y objetos
El ejemplo más simple
Aunque PHP no es un lenguaje En este ejemplo podemos ver como utilizar una clase para definir una plantilla que va a
orientado a objetos, sí tiene multiplicar siete por ocho y que nos va a devolver el resultado de esa operación cada vez que
recursos que permiten definir sea invocada.
clases y construir objetos.
La sintaxis es la siguiente:
En este ejemplo puedes observar cómo al invocar dos veces a $objeto el valor que nos devuelve
es el resultado de la última llamada y también como se pueden crear dos objetos distintos.
class nombre {
....
... definición de variables.... <?
.... class Multiplica{
.. constructores (opcional)... var $resultado;
.... function curratelo($a,$b){
.. definición de funciones... $this->resultado=$a*$b;
.... }
} function imprimelo(){
Vayamos por partes.
echo $this->resultado,"<br>";
}
Dentro de una clase podemos }
definir las variables que serán $objeto= new Multiplica;
utilizadas por sus funciones $objeto->curratelo(7,3);
internas y a las que es posible (no $objeto->curratelo(11,4);
es imprescindible hacerlo) asignar $objeto1= new Multiplica;
valores. $objeto1->curratelo(-23,11);
Para definir una variable es $objeto->imprimelo();
obligatorio anteponer var a su $objeto1->imprimelo();
nombre y en el caso de que ?>
tratemos de asignarle un valor,
bastará con poner detrás del
nombre el signo = seguido del Ver ejemplo71.php
valor.
var $pepe="Jose"
<?
es una sintaxis válida, pero class Multiplica{
var $resultado;
$pepe="Jose" var $indice=0;
no lo es, le falta el var y si lo
function curratelo($a,$b){
escribimos así nos dará un error.
$this->resultado[$this->indice]=$a*$b;
Más adelante hablaremos de los $this->indice++;
constructores, pero dado su }
carácter opcional veamos antes las
funciones. function imprimelo(){
foreach($this->resultado as $valor){
Las funciones definidas dentro de echo $valor,"<br>";
las clases tienen una sintaxis
}
idéntica al resto de las funciones
PHP con una salvedad importante:
}
Reiterando
llamadas a objetos
<?
Si hacemos varias llamadas a una Class Operaciones {
función utilizando el mismo objeto var $inicializada=32;
los resultados se van var $num1;
sobrescribiendo sobre los de la var $num2;
llamada anterior. var $suma;
Si queremos conservar varios
var $diferencia;
resultados obtenidos de la var $producto;
aplicación de la misma función var $cociente;
tenemos dos opciones: var $contador=0;
function Operaciones ($val1=45,$val2=55){
■ Crear varios objetos
$this->contador +=1;
■ Utilizar arrays $c=$this->contador;
$this->num1[$this->contador]=$val1;
$this->num2[$c]=$val2;
En los ejemplos podemos ver
$this->suma[$c]=$val1+$val2;
ambos supuestos.
$this->diferencia[$c]=$val1-$val2;
$this->producto[$c]=$val1*$val2;
Constructores $this->cociente[$c]=$this->inicializada*$val1/$val2;
}
Cuando se define una función cuyo
nombre es idéntico al de la clase
que la contiene recibe el nombre function imprime(){
de constructor. print "<table align=center border=1>";
print "<td>Num 1</td><td>num2</td><td>Suma</td>";
Esa función -el constructor- se
print "<td>Diferencia</td><td>Producto</td><td>Cociente</td><tr>";
ejecuta de forma automática en el
momento en que se define un foreach($this->num1 as $clave=>$valor){
nuevo objeto (new) print "<td align=center>".$valor."</td>";
print "<td align=center>".$this->num2[$clave]."</td>";
Según como esté definido, el print "<td align=center>".$this->suma[$clave]."</td>";
constructor puede ejecutarse de print "<td align=center>".$this->diferencia[$clave]."</td>";
distintas formas: print "<td align=center>".$this->producto[$clave]."</td>";
print "<td align=center>".$this->cociente[$clave]."</td><tr>";
• Con los valores predefinidos en
las variables de la clase.
}
print "</table>";
• Mediante la asignación de
valores preestablecidos en los }
propios parámetros de la función }
constructor. $objeto= new Operaciones;
En el ejemplo puedes ver la
sintaxis de esta forma en la que se
for ($i=1;$i<11;$i++){
for ($j=1;$j<11;$j++){
le asignan los valores 3 y 7 a las
$objeto -> Operaciones($i,$j);
variables $a y $b.
}
En el mismo ejemplo puedes ver }
también la utilidad añadida del
constructor. $objeto-> imprime();
PHP también tiene la posibilidad de Para que el constructor de la clase padre sea ejecutado desde la clase extendida tiene que ser
crear clases extendidas cuya invocado expresamente.
virtud es poder disponer tanto de
variables y funciones propias como
de todas las variables y funciones <?
de la clase padre. class Multiplica{
function Multiplica(){
Para crear clases extendidas se
print $this->factor1*$this->factor2."<br>";
requiere utilizar la siguiente
sintaxis:
print "Esto está en el constructor de la clase padre<br>";
}
class nuev extends base { }
....
... definición de variables.... class MeSeOlvido extends Multiplica{
....
.. constructores (opcional)... var $divisor=5;
.... function MeSeOlvido(){
.. definición de funciones...
print $this->factor1*$this->factor2/$this->divisor."<br>";
....
}
}
}
Como habrás podido deducir nuev
es el nombre de la nueva clase (la $objeto= new MeSeOlvido;
extendida), base es el nombre de
la clase padre y extens es la $objeto->Multiplica();
palabra clave que indica a PHP que ?>
se trata de una clase extendida.
get_class_methods(clas)
Ver ejemplo77.php
Devuelve un array conteniendo los
valores de todos los métodos Ejemplo de utilización de ::
(funciones) definidas en la clase
clas.
<?
get_object_var(obj) class A {
function ejemplo() {
Devuelve todas las variables (y
sus valores) contenidas en el echo "Este es el resultado de la función ejemplo<br>";
objeto obj. }
}
La llamada :: # llamo a la funcion sin crear un nuevo objeto
# usando ::
PHP permite llamar a una función A::ejemplo();
definida en una clase sin
necesidad de crear un objeto. #ahora creo el objeto $b y llamo a la función
La sintaxis es la siguiente:
$b = new A;
clase :: funcion() $b->ejemplo();
?>
donde clase es el nombre de una
clase y funcion() es una función
definida dentro de esa clase. ejemplo78.php
Su funcionalidad es la misma que
si escribiéramos:
Métodos con el mismo nombre
$nombre = new clase