Bienvenid@ webmaster Acceso Directo :
ir al home
Home
Productos y Servicios
Artículos y Secciones
Foros de Discusión
Registro de Usuarios
Usuarios
Canal del Webmaster
Contactos
©2004 Blasten.com
Envía tus Articulos


ArtículoComentariosRecomendarGuardarImprimir
Clases y Objetos en PhpResaltado
Aunque PHP no es en si mismo un leguaje de programaci?n orientado a objetos si dispone de algunas caracter?sticas que permiten definir clases y construir objetos.

La implementaci?n de clases no va a a?adir ninguna funcionalidad nueva a las posibilidades de PHP. Su verdadera utilidad es la de hacer la programaci?n de otra manera, con un c?digo m?s legible y reutilizable.

Y ...como cada maestrillo tiene ... sus ?man?as? ;-) seguro que encontrar?s ac?rrim@s defensores de ese modo de programar y tambi?n empecinad@s detractores que defender?n que ... para este viaje no hacen falta alforjas yo solo te dir?, aqu? lo tienes... si te gusta qu?datelo y sino olv?dalo.


Las clases

Una clase no parece ser otra cosa que una especie de plantilla en la que se pueden definir una serie de variables -a las que se pueden asignar valores predefinidos- y funciones que pueden ser invocadas -en todo o en parte- desde cualquier otra parte del documento.

La sintaxis es la siguiente:

class nombre {
....
... definici?n de variables....
....
.. constructores (opcional)...
....
.. definici?n de funciones...
....
}


Vayamos por partes...

Dentro de la clase podemos definir variables que ser?n usadas por las funciones internas de esa clase y a las que se puede (no es obligatorio hacerlo) asignar valores.

Para definir una variable es obligatorio anteponer var al nombre de la variable y en el caso de que pretendamos asignarles un valor bastar? con poner detr?s del nombre de la variable el signo = y a continuaci?n el valor.

Ni que decir tiene que... el nombre de la variable utiliza la sintaxis habitual de PHP y que si los valores asignados son tipo cadena tienen que ir entre comillas.

var $pepe="Jose"

es una sintaxis v?lida, pero...

$pepe="Jose"


no lo es, le falta el var y si lo escribes as?... te dar? error

M?s tarde te contar? la triste historia de los contructores pero... como son opcionales, antes vamos a mencionar a las funciones.

Las funciones definidas dentro de las clases tienen una sintaxis id?ntica a las dem?s funciones PHP con una salvedad importante.

Siempre que desde una funci?n se invoque una variable definida dentro de la clase debe hacerse con la siguiente sintaxis:

$this->variable

??Ojo al Cristo que es de plata... ;-)

F?jate bien... el $ va siempre delante de la palabra this y solo se escribe una vez y en esa posici?n.
El nombre de la variable (que va siempre despu?s de -> no lleva pegado el $.

??Mira los ejemplos...!!
Crear y utilizar objetos

Las clases son solo plantillas y sus funciones no se ejecutan hasta que se les ordene.

Para poder utilizarlas primero debemos crear un objeto y luego ejecutar sobre ese objeto la funci?n o funciones que deseemos

Creaci?n de objetos
Para crear un objeto utilizando una clase determinada debemos utilizar siempre esta sintaxis:

$nombre = new clase

donde nombre es una palabra cualquiera con la que identificaremos el objeto (como si se tratara de una variable) y clase es el nombre de una de las clases definidas.

??Cuidadito...!!

F?jate que detr?s del nombre de la clase no he puesto los famosos () que suelen utilizarse para invocar a las funciones.

Te juro que no fu? olvido..:-)
Y te juro tambi?n que me pas? un par de horas peleando por mi man?a de ponerlos... y aunque se que estas cosas ...solo me pasan a m? ;-) te lo comento... por si las moscas ;-)

Utilizando objetos

Una vez definido un objeto ya se le pueden aplicar las funciones definidas en la clase. La sintaxis es esta:

$nombre->funcion()

Donde $nombre es la misma variable utilizada a la hora de crear el objeto el -> no es un adorno, lo juro..;-), funcion es el nombre de una de las funciones definidas en la clase invocada y donde los () si son obligatorios y adem?s -como ocurre en las funciones- pueden contener valores, variables, etc. etc. separadas por comas.

Reiterando llamadas a objetos

Si hacemos varias llamadas a una funci?n utilizando el mismo objeto los resultados de la ?ltima llamada se sobreescriben sobre los de la llamada anterior.
Si queremos conservar varios resultados obetenidos de la aplicaci?n de la misma funci?n parece ser que tenemos dos opciones:
Crear varios objetos
Utilizar arrays
Para que no me llames pelmazo en el ejemplo ejemploC2 puedes ver el primer supuesto y en ejemploC3 un caso de la segunda opci?n.


Constructores

Las clases tienen una peculiaridad interesante.
Cuando se define una funci?n con un nombre id?ntico al nombre de la clase, a esa funci?n se le llama un constructor.

Esa funci?n -el constructor- tiene la peculiaridad de que se ejecuta de forma autom?tica en el momento en que el se define un nuevo objeto (new)

Y dependiendo como est? definido el constructor puede ejecutarse de distintas formas:

? Utilizando los valores predefinidos en las variables de la clase.


? Asignado unos valores preestablecidos a los par?metros de la funci?n constructor

Cuando se le pasan valores la funci?n se ejecuta olvid?ndose de los valores asignados por defecto en la funci?n y cuando se le pasan solo parte de los valores utiliza los valores recibidos y para los asignados en la llamada utiliza -por defecto- los valores del constructor.


Clases extendidas

Bueno... el caso es que... por si construimos la casa y y olvidamos ponerle ventanas.. ;-) PHP tiene la posibilidad de crear clases extendidas que tienen la virtud de poder disponer tanto de las variables y funciones propias como de todas las variables y funciones de la clase base.

Sintaxis de las clases extendidas

Para crear una clase extendida debemos utilizar la siguiente sintaxis:

class nuev extends base {
....
... definici?n de variables....
....
.. constructores (opcional)...
....
.. definici?n de funciones...
....
}


Como habr?s deducido -se te ve en los ojos que si :-) - nuev es el nombre de la nueva clase (la extendida), base es el nombre de la clase padre y extens es eso... extends, es decir la palabra clave que indica a PHP que se trata de una clase extendida.

??Cuidado... con los vicios!!

No es posible crear una clase extendida de otra clase extendida. PHP no soporta herencias m?ltiples.

??Que lo sepas... ;-)


Funciones con Clases y objetos

PHP dispone de algunas funciones que pueden resultarte ?tiles a la hora de trabajar con clases y objetos. Son estas:

method_exists(obj, func)

Comprueba si la funcion func (funci?n y m?todo son sin?nimos) est? definida en el objeto obj.

Devuelve un valor booleano. Cierto (true) en el caso de que exista esa funci?n y falso en el caso de que no exista.

get_class_vars(clase)

Devuelve un array asociativo cuyos ?ndices son los nombres de las variables y cuyos valores son los valores preasignados a esa variable.

Solo recoge en ese array las variables que han sido inicializadas asign?ndoles un valor.

get_class_methods(clas)

Devuelve un array conteniendo los valores de todos los m?todos (funciones) definidas en la clase clas.

get_object_var(obj)

Devuelve todas las variables (y sus valores) contenidas en el objeto obj.


La llamada :

PHP permite llamar a una funci?n definida en una clase sin necesidad de crear previamente un objeto.

La sintaxis es esta:

clase :: funcion()

donde clase es el nombre de una clase y funcion() es una funci?n definida dentro de esa clase.

Su funcionalidad es la misma que si escribi?ramos:

$nombre = new clase

$nombre -> funcion ()


[color=0000BF]EJEMPLOS:[/[/color]

Un ejemplo muy sencillo

En este ejemplo vemos como utilizar una clase para definir una plantilla que va a multiplicar siete por ocho y que nos va a devolver el resultado de esa operaci?n cada vez que sea invocada.



<?
class Multiplica{

    var 
$factor1=7;
    var 
$factor2=8;

    function 
curratelo(){
        echo 
$this->factor1*$this->factor2;
       }
}

   
$objeto= new Multiplica;
   
$objeto->curratelo();
 
?>



Ver ejemploC1.php

Invocando varias veces el mismo objeto

En este ejemplo puedes observar como 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 Multiplica{

    var 
$resultado;


    function 
curratelo($a,$b){
      
$this->resultado=$a*$b;
       }
       
    function 
imprimelo(){
        echo 
$this->resultado,"<br>";
       }
}

   
$objeto= new Multiplica;
   
$objeto->curratelo(7,3);
   
$objeto->curratelo(11,4);

   
$objeto1= new Multiplica;
   
$objeto1->curratelo(-23,11);

   
$objeto->imprimelo();
   
$objeto1->imprimelo();

 
?>



Ver ejemploC2.php

Recogiendo resultados en un array

En este ejemplo vemos como se puede invocar reiteradamente a una funci?n utilizando el mismo objeto y como pueden recogerse esos resultados en un array.


<?
class Multiplica{

    var 
$resultado;
    var 
$indice=0;


   function 
curratelo($a,$b){
      
$this->resultado[$this->indice]=$a*$b;
      
$this->indice++;
       }

   function 
imprimelo(){
       foreach(
$this->resultado as $valor){
            echo 
$valor,"<br>";
        }
   }

}

   
$objeto= new Multiplica;
   
   
$objeto->curratelo(7,3);
   
$objeto->curratelo(11,4);
   
$objeto->curratelo(-23,11);

   
$objeto->imprimelo();

 
?>



Ver ejemploC3.php  



Ejemplos de uso de un constructor


[codigo]<?
class Multiplica{

    var 
$factor1=7;
    var 
$factor2=8;

    function 
Multiplica(){
        echo 
$this->factor1*$this->factor2,"$lt;br>";
    }
}

   
$objeto= new Multiplica;

 
?>




Ver ejemploC4.php


<?
class Multiplica{

    var 
$producto;


    function 
Multiplica($a=3,$b=7){
        
$this->producto=$a*$b;
        echo 
$this->producto,"<br>";
    }
}
   
$objeto= new Multiplica;

   
$objeto->Multiplica(90,47);

   
$objeto->Multiplica(47);

   
$objeto->Multiplica();


 
?>




Ver ejemploC5.php

Un ejemplo un poco m?s... completo

En este ejemplo puedes ver como el constructor crea autom?ticamente los valores de la primera fila de la tabla resultante.

F?jate en la parte del script marcada en rojo. ?Parece un poco absurdo, verdad...?

?Por qu? he utilizado las variables $n2, $s, $d, $p y $c?

?Por qu? utilizo esas variables intermedias en vez de asignar directamente en los echo los $this->num2[$clave], etc.?

La explicaci?n es simple. Te juro que intentar... intentelo... pero... no funciona... ?Por qu?? Para m?... misterios de la santa madre iglesia. No tengo ni idea del por qu?... pero eso me ha ocurrido y as? logr? salir del atolladero.
??qu? sudores me ha costado... ufffffffff!!


<?
Class Operaciones {
    var 
$inicializada=32;
    var 
$num1;
    var 
$num2;
    var 
$suma;
    var 
$diferencia;
    var 
$producto;
    var 
$cociente;
    var 
$contador=0;
      function 
Operaciones ($val1=45,$val2=55){
        
$this->contador +=1;
        
$c=$this->contador;
        
$this->num1[$this->contador]=$val1;
        
$this->num2[$c]=$val2;
        
$this->suma[$c]=$val1+$val2;
        
$this->diferencia[$c]=$val1-$val2;
        
$this->producto[$c]=$val1*$val2;
        
$this->cociente[$c]=$this->inicializada*$val1/$val2;
              }


     function 
imprime(){
         echo 
"<table align=center border=1>";
         echo 
"<td>Num 1</td><td>num2</td><td>Suma</td>";
         echo 
"<td>Diferencia</td><td>Producto</td><td>Cociente</td><tr>";
         foreach(
$this->num1 as $clave=>$valor){
             
$n2=$this->num2[$clave];
             
$s=$this->suma[$clave];
             
$d=$this->diferencia[$clave];
             
$p=$this->producto[$clave];
             
$c=$this->cociente[$clave];
             echo 
"<td align=center>$valor</td>";
             echo 
"<td align=center>$n2</td>";
             echo 
"<td align=center>$s</td>";
             echo 
"<td align=center>$d</td>";
             echo 
"<td align=center>$p</td>";
             echo 
"<td align=center>$c</td><tr>";
     }
      echo 
"</table>";

     }
}
$objeto= new Operaciones;

for (
$i=1;$i<11;$i++){
    for (
$j=1;$j<11;$j++){
        
$objeto -> Operaciones($i,$j);
           }
}

$objeto-> imprime();

?>




Ver ejemploC6.php


Un ejemplo de clase extendida

En este ejemplo puedes ver como las clases extendidas utilizan variables de la clase padre, pueden tener constructores propios pero... ??ojo al dato... como dice garc?a... solo ejecutan su propio constructor pero no el de la clase padre.

F?jate... solo se ejecuta -desde la clase extendida- el constructor de la clase padre cuando es invocado.


<?
class Multiplica{

    var 
$factor1=7;
    var 
$factor2=8;

    function 
Multiplica(){
        echo 
$this->factor1*$this->factor2,"<br>";
        echo 
"Esto est? en el constructor de la clase padre<br>";
    }
}

class 
MeSeOlvido extends Multiplica{

   var 
$divisor=5;
   function 
MeSeOlvido(){
        echo 
$this->factor1*$this->factor2/$this->divisor,"<br>";
   }
}

$objeto= new MeSeOlvido;

$objeto->Multiplica();
 
?>


Ver ejemploC7.php

Ejemplo de funciones PHP con clases y objetos

En este ejemplo puedes comprobar -seguro que ya lo sab?as- que las clases pueden escribirse en ficheros externos y posteriormente ser incluidas en un script PHP mediante la funci?n include.

Tienes tambi?n la aplicaci?n de las funciones con clases y objetos y tienes una funci?n PHP que acabo de conocer.

Se trata de la funci?n print_r que como podr?s ver si ejecutas el ejemplo muestra de una forma inteligible el contenido de un array.


<?
include("ejemploC6.php");

$busca="imprima";

if(
method_exists $objeto$busca)){
    echo 
"Existe la funci?n  $busca <br>";
}else{
    echo 
"No existe la funci?n $busca <br>";
}

$r=get_class_vars ("Operaciones");
foreach (
$r as $pepe=>$pepito){
    echo 
"$pepe -->$pepito<br>";
}

$s=get_class_methods("Operaciones");
foreach(
$s as $clave){
    echo 
$clave,"<br>";
}
print_r(get_object_vars($objeto));
?>



Ver ejemploC8.php

Ejemplo de utilizaci?n de ::


<?
class {
    function 
ejemplo() {
        echo 
"Este es el resultado de la funci?n ejemplo<br>";
        }
}

# llamo a la funcion sin crear un nuevo objeto
# usando ::
A::ejemplo();

#ahora creo el objeto $b y llamo a la funci?n

$b = new A;
$b->ejemplo();
?>




ejemploC9.php


CORTESIA / CREDITOS : http://www.rinconastur.com




Artículos Relacionados
Clases y Objetos (PHP)
Usuarios en Linea con Objetos y Mysql (PHP)

Más Artículos relacionados >>
Artículo anterior
Descargar este contenido

Autor: No Disponible
Fecha: 27/10/2004 (565 días) Lecturas : 7.910
Valoración :
Comentarios: 25

oVdpSwAMRyX

cheap cheap drug propecia tramadol >
Valoración:
GElHhlxCYkRfBSS

auto insurance quotes >:-((
Valoración:
gLRSzqkCNB

generic valium 8-)
Valoración:
yHVjqIWS

xanax prescriptions =)
Valoración:
jvrcIbcyFj

phentermine hcl 8OOO
Valoración:
aoArdTlkJRgGBnN

Z0Ixzr riryxkquovuf, [url=http://erkfssokzcad.com/]erkfssokz
Valoración:

Agregar a mi lista
Solicitar Ayuda


subir página
Los contenidos expuestos en blasten.com® son propiedad única de sus autores, por lo cual se prohíbe la reproducción total o parcial de los contenidos expuestos en este sitio sin previo consentimiento del autor y el editor. Para intercambios de contenidos haga clic aqui y contáctenos. El logotipo y el nombre BLASTEN así como todos los gráficos expuestos son propiedad exclusiva de este portal.
©2004-2005 blasten.com Network