Вы находитесь на странице: 1из 9

PHP orientado a objetos.

La mayora de los lenguajes de programacin modernos son orientados a objetos (abreviado OO) o en su defecto se aproximan mucho a stos permitiendo algunas de sus caractersticas como es el caso de PHP. Esta OO provee la habilidad de tratar los aspectos de un sistema complejo, principalmente con el uso de clases, objetos, relaciones, instancias, propiedades y mtodos. Para crear programas de forma que se asemejen a la realidad.

Objetos y clases
Cuando hablamos de software OO los objetos casi siempre son elementos fsicos, como puede ser un cliente, proveedor, etc. o elementos conceptuales que existen en el entorno software, por ejemplo un objeto encargado del mantenimiento de archivos. El objetivo es representar a estos elementos de la vida real y a los conceptuales como unidades de software. La programacin OO esta pensada para construir objetos que contienen atributos y operaciones de manera que cubran nuestras necesidades. Los atributos son variables que contienen informacin del estado de un objeto. Y las operaciones tambin conocidas como mtodos, funciones y acciones realizan modificaciones del propio objeto o realizan alguna accin externa a ste. Una de las principales ventajas de la programacin OO es el concepto de encapsulacin, conocido tambin como proteccin de datos, mediante el cual solo se pueden modificar los datos de un objeto accediendo a travs de sus mtodos u operaciones (interfaz del objeto). Nunca se pueden modificar directamente desde la aplicacin principal. La funcionalidad de un objeto est sujeta a los datos que este maneja, una ventaja de usar objetos es que podemos modificar la funcionalidad de ste, aadir mejoras o corregir errores sin necesidad de cambiar su interfaz. Ya que en caso contrario un proyecto estara sujeto a un mayor nmero de fallos y los cambios seran ms costosos. En algunas reas de la programacin de aplicaciones Web el uso de la programacin OO est desestimado, usndose una metodologa estructurada basada en funciones, esto es debido a que determinados proyectos no son lo suficientemente extensos como para aplicarles una metodologa OO. En la programacin OO los objetos son nicos y son instancias a una clase determinada. En principio se define la clase con los atributos y mtodos correspondientes y luego se crea el objeto que est basado en una determinada clase (esto se conoce como instancia). Se puede comparar a un objeto con una variable y la clase sera un tipo de dato definido por nosotros.

Cmo crear clases, atributos y operaciones en PHP


Hasta ahora hemos hablado de las clases de una forma conceptual, a continuacin veremos cmo se crean, para crear una clase en PHP usaremos la palabra reservada class, luego colocamos el nombre de la clase. La estructura mnima de una clase es la siguiente:
class NombreClase { }

Para que una clase sea til, necesita atributos y operaciones. Los cuales se deben declaran dentro de las llaves {}. Podemos crear atributos utilizando la palabra reservada var:
class NombreClase { var $atributo1; var $atributo2; }

Podemos crear mtodos declarando funciones dentro de la definicin de la clase utilizando la palabra reservada function, el siguiente cdigo crea una clase llamada NombreClase con dos operaciones que no hacen nada. A metodo1 no le pasamos ningn parmetro y a metodo2 le pasamos dos parmetros.
class NombreClase { var $atributo1; var $atributo2 = Valor por Defecto; function metodo1() { echo $this->atributo2; } function metodo2($param1, $param2) { } }

La variable $this es una referencia al objeto actual que se est usando.

Qu es el constructor de una clase


Las clases soportan un tipo de funcin especial que se conoce como constructor. El constructor es llamado cuando se crea el objeto. All se colocan cualquier inicializacin que el objeto requiera antes de ser usado, tales como: asignacin de valores a determinados atributos, crear nuevos objetos necesarios para el correcto funcionamiento del objeto, etc. Pueden Recibir datos pasados como parmetro, para inicializar los objetos segn sea el caso. El constructor se declara de la misma forma que los mtodos, lo nico que debemos utilizar la funcin __construct(). A pesar de que nosotros podemos llamar al constructor, su principal propsito es ser llamado automticamente cuando un objeto es creado. A continuacin veremos como se declara el constructor de una clase:
class NombreClase { var $atributo1; var $atributo2 = Valor por Defecto; function __construct($arg1){ $this->atributo1 = $arg1; $this->atributo2 = valor 2; } function mostrar() { echo $this->atributo1; echo $this->atributo2; } }

Qu es el destructor de una clase


El Mtodo destructor de una clase, si esta definido, se invoca cuando todas las referencias a un objeto en pacticular sean removidas o cuando el objeto sea explcitamente destruido. Un destructor de clase se define como la funcin __destruct().
class NombreClase { var $atributo1; var $atributo2 = Valor por Defecto; function __construct($arg1){ $this->atributo1 = $arg1; $this->atributo2 = valor 2; } function mostrar() { echo $this->atributo1; echo $this->atributo2; } function __destruct(){ echo se destruye el Objeto!; } }

Cmo usar objetos, instanciar una clase


Despus de haber declarado una clase, ya podemos usarla creando un objeto que es una instancia a esa clase como ya se ha mencionado anteriormente. Es muy importante que esto quede claro, los objetos son instancias a una clase, por lo tanto cada objeto es nico. En php creamos un objeto usando la palabra reservada new. Tambin debemos indicar a que clase va a instanciar el objeto que creemos y pasarle los parmetros (si los requiere) al constructor, en el siguiente cdigo vamos a ver un ejemplo de esto, para ello tomamos como referencia la clase anterior NombreClase:
$a = new NombreClase("Primero"); $a ->mostrar();

Como resultado de este cdigo vemos que el constructor es llamado cada vez que se crea el objeto y destruido a terminar de utilizarlo, el resultado es el siguiente:
Primero valor 2 se destruye el Objeto!

Cmo usar los atributos y mtodos de una clase


Para acceder a los tributos y mtodos de un objeto se emplea el operador ->, como se ve a continuacin:
$obj->nombre_atributo; $obj->nombre_metodo(); $obj = new NombreClase(); echo $obj1->atributo1;

Una clase, accede a un miembro dentro de la misma definicin de clase utilizando la variable $this. Si nuestra clase tiene un atributo llamado $atributo, podemos hacer referencia a este desde nuestra clase (mtodos) de la siguiente forma $this->atributo:
class NombreClase { var $atributo; function metodo($param) { $this->atributo = $param; echo $this->atributo; } }

Se puede realizar la misma accin que anteriormente desde fuera de la clase, usando esta sintaxis.
NombreClase { var $atributo; }

$a = new NombreClase(); $a->atributo = "valor"; echo $a->atributo;

Visibilidad de atributos y metodos


En PHP, se peude definir la disponibilidad para los atributos y mtodos. Los tipos de acuerdo a las reglas son las siguientes: Publica: Los elementos que tienen esta visibilidad pueden ser accedidos desde cualquier lugar dentro del programa. Protegida: Los elementos que tienen esta visibilidad limitan el acceso solo a la clase que define y a las clases que heredan de esta. Privada: los elementos que contengan esta visibilidad sern limitados solo a la clase que los define.

La visibilidad de un atributo o mtodo puede ser definida anteponindole las palabras reservada: public, protected o prvate. No es una prctica recomendable acceder directamente a los atributos de una clase desde fuera de sta. Como se ha comentado anteriormente una de las ventajas de la POO es que permite realizar encapsulacin por esta razn aunque PHP no permita ocultar los atributos o mtodos de una clase, nosotros deberamos no acceder directamente a ellos, para diferenciarlos de los pblicos. Para los atributos que queramos acceder directamente desde fuera de la clase, deberamos escribir funciones de acceso, tanto para establecer como para coger valores. Deberamos tener un cdigo como el siguiente:
class NombreClase { var $atributo; function get_atributo() { //devuelve el valor de atributo return $this->atributo; } function set_atributo($valor_nuevo) { //establece el valor de atributo $this->atributo = $valor_nuevo; } }

La finalidad de hacer esto, es clarificar el cdigo y tener una seccin de cdigo encargada de acceder a los atributos para mantener la encapsulacin, y que no sean accedidos directamente. Adems si seguimos estas prcticas aumentar la calidad de nuestro software ya que podremos introducir comprobaciones de datos, como rangos, valores permitidos, etc. Veamos un ejemplo de validacin de datos a la hora de asignar un valor a atributo mediante el mtodo set_atributo:

function set_atributo($valor_nuevo) { if ($valor_nuevo > 100) { $this->atributo = $valor_nuevo; } }

En el cdigo superior vemos que cuando queremos asignar a atributo valores inferiores a 100 no nos deja, y atributo seguir manteniendo su valor.
Clase de Conexin con mysql: <?php class DB_mysql { /* variables de conexin */ var $BaseDatos; var $Servidor; var $Usuario; var $Clave; /* identificador de conexin y consulta */ var $Conexion_ID = 0; var $Consulta_ID = 0; /* nmero de error y texto error */ var $Errno = 0; var $Error = ""; /* Mtodo Constructor: Cada vez que creemos una variable de esta clase, se ejecutar esta funcin */ function DB_mysql($bd = "", $host = "localhost", $user = "mysqladmin", $pass = "mysqlamin") { $this->BaseDatos = $bd; $this->Servidor = $host; $this->Usuario = $user; $this->Clave = $pass; }

/*Conexin a la base de datos*/ function conectar($bd, $host, $user, $pass){ if ($bd != "") $this->BaseDatos = $bd; if ($host != "") $this->Servidor = $host; if ($user != "") $this->Usuario = $user; if ($pass != "") $this->Clave = $pass; // Conectamos al servidor $this->Conexion_ID = mysql_connect($this->Servidor, $this->Usuario, $this>Clave); if (!$this->Conexion_ID) { $this->Error = "Ha fallado la conexin."; return 0; } //seleccionamos la base de datos if (!@mysql_select_db($this->BaseDatos, $this->Conexion_ID)) { $this->Error = "Imposible abrir ".$this->BaseDatos ; return 0; } /* Si hemos tenido xito conectando devuelve el identificador de la conexin, sino devuelve 0 */ return $this->Conexion_ID; } /* Ejecuta un consulta */ function consulta($sql = ""){ if ($sql == "") { $this->Error = "No ha especificado una consulta SQL"; return 0; }

//ejecutamos la consulta $this->Consulta_ID = @mysql_query($sql, $this->Conexion_ID); if (!$this->Consulta_ID) { $this->Errno = mysql_errno(); $this->Error = mysql_error(); } /* Si hemos tenido xito en la consulta devuelve el identificador de la conexin, sino devuelve 0 */ return $this->Consulta_ID; } /* Devuelve el nmero de campos de una consulta */ function numcampos() { return mysql_num_fields($this->Consulta_ID); } /* Devuelve el nmero de registros de una consulta */ function numregistros(){ return mysql_num_rows($this->Consulta_ID); } /* Devuelve el nombre de un campo de una consulta */ function nombrecampo($numcampo) { return mysql_field_name($this->Consulta_ID, $numcampo); } /* Muestra los datos de una consulta */ function verconsulta() { echo "<table border=1>n"; // mostramos los nombres de los campos for ($i = 0; $i < $this->numcampos(); $i++){

echo "<td><b>".$this->nombrecampo($i)."</b></td>n"; } echo "</tr>n"; // mostrarmos los registros while ($row = mysql_fetch_row($this->Consulta_ID)) { echo "<tr> n"; for ($i = 0; $i < $this->numcampos(); $i++){ echo "<td>".$row[$i]."</td>n"; } echo "</tr>n"; } } } //fin de la Clse DB_mysql ?>

Вам также может понравиться