Como cargar Clase PHP dentro de un modulo personalizado en Drupal 7

Author Top
kenneth

El paradigma de programación orientada a objectos esta disponible en PHP a partir de la versión 5, para las personas que están acostumbradas a trabajar bajo este paradigma también lo pueden tener disponible mientras utilizan Drupal  7. Algunas de las preguntas mas frecuentes son:

  • ¿Que nombre utilizar para mi clase?
  • ¿Donde colocar mi clase?
  • ¿Como tener acceso a mi clase dentro de los módulos?
  • ¿Como definir y utilizar mi clase?

Contestare estas preguntas con una recomendación. Asumiendo que deseamos crear una clase para crear recordatorios dentro de un modulo personalizado que llamaremos 'generador_recordatorios', mostrare un ejemplo sencillo de como cargar nuestra clase PHP y tener acceso a esta dentro de nuestro módulo personalizado. 

1. ¿Que nombre utilizar para mi clase?

Como dice la documentación de PHP, en el manual de 'Clases y Objetos' la sección 'Lo Básico' podemos utilizar cualquier nombre de etiqueta valida para nombrar la clase.

Ahora bien teniendo presente que en Drupal existen muchos módulos contribuidos que pudiéramos utilizar y estos pueden contener definidas clases. Por tanto ser recomienda agregar a nuestra clase un prefijo que permita diferenciar las clases y de está forma evitar conflictos con algún otro modulo contribuido que utilice un nombre de clase igual.

Por ejemplo podemos pensar en crear la clase llamada 'Recordatorio' y que en nuestro módulo personalizado tendrá cierta lógica implementada, sin embargo puede ser que en algún otro modulo exista una clase llamada 'Recordatorio' que encapsula otra lógica y esto generara un conflicto por llamarse igual.

Por este motivo llamaremos nuestra clase 'CreadorRecordatorio'; tengamos en mente que podemos utilizar cualquier prefijo que nos ayude a definir un nombre inequívoco para nuestra clase y evitar que tener un conflicto a futuro.

2. ¿Donde colocar mi clase?

Podríamos almacenar nuestras clases en cualquier parte de nuestro módulo, sin embargo recomendamos guardarlas dentro de una carpeta llamada includes y allí es donde podremos almacenar nuestros archivos *.php que contengan las clases personalizadas.

En PHP no existe una regla magna de como llamar a los archivos que tienen definidas las clases, sin embargo para que lograr diferenciarlos les podemos colocar la terminación *.class.php y si se tratara de una clase abstracta o una interface podríamos utilizar las terminaciones *.abstract.php e *.interface.php respectivamente según sea el caso.

3. ¿Como tener acceso a mis clases dentro de los modulos?

Ahora bien para que nuestra clase este accesible en todo nuestro modulo lo definiremos en el archivo *.info de la siguiente manera:

; $Id$
name = "Generador de recordatorios"
description = "Permite definir recordatorios."
package = Personalizado
core = 7.x

files[] = includes/CreadorRecordatorio.class.php

En la ultima linea agregamos al arreglo "files" la dirección de donde encontrar nuestra clase y que Drupal pueda cargarla en nuestro modulo, permitiéndonos poder hacer uso de ella, si nuestro modulo ya fue creado con anterioridad de igual forma lo definimos en el archivo *.info y luego de eso limpiamos la cache, luego de eso podemos tener acceso a la clase.

4. ¿Como definir y utilizar mi clase?

Ahora bien, nuestro archivo donde esta definido la clase se podría ver de la siguiente forma:

<?php

class CreadorRecordatorio {

 public function __construct() {
 
 }

}

Una vez creada nuestra clase y definida en el archivo *.info podemos tener acceso a nuestra clase dentro de cualquier función que definiéramos dentro o fuera de nuestro módulo, en este ejemplo lo veremos dentro del hook_init(),  en esta implementación utilizaremos el metodo class_exists que nos proporciona PHP para saber si podemos hacer uso de dicha clase. 

function generador_recordatorios_init(){

 if(class_exists('CreadorRecordatorio')){
 watchdog('generador_redodatorios', 'Clase CreadorRecordatorio cargada, new CreadorRecordatorio(): ' . dpr(new CreadorRecordatorio(), 1));
 }
 else{
 watchdog('generador_redodatorios', 'Clase CreadorRecordatorio NO cargada');
 }

}

Cabe recordar que esta verificación la estamos haciendo únicamente en este "hook" para saber si hemos realizado bien el proceso de cargar nuestra clase, y que eventualmente podemos tener acceso a ella sin realizar dicha verificación, pudiendo instanciar nuevos objetos de nuestra clase por medio del operador 'new' (Utilizando new CreadorRecordatorio()).

Espero que les haya sido de mucha ayuda y de esta manera puedan trabajar en parte bajo el paradigma de programacion oriendata a objectos en nuestros proyectos con Drupal,

Saludos,

bursa esc
bursa eskort
bursa escort bayan bursa travesti escort bursa merkez escort bursaescort bursa escort bayanlar alanya eskort bayan antalya bayan eskort havalimanı transfer