2009-04-22 23 views
8

Estoy tratando de pasar al desarrollo de programación orientada a objetos y estoy volviendo aquí ya que estoy cansado de buscar en la web y encontrar solo la información más básica acerca de qué clases son y cómo pueden heredarse el uno del otro - que Entiendo.Cómo funciona OOP para 'incluir' clases almacenadas en archivos diferentes

Lo que no entiendo hasta ahora es cómo todas estas clases se pueden almacenar en diferentes archivos, adornadas alrededor de una estructura de carpetas, y todo lo que necesitas hacer para usar la clase es simplemente mencionar su nombre en tu código. Como funciona esto exactamente?

Y en una nota relacionada, si alguien puede recomendar un buen libro o tutorial en línea que proporcionará una buena base en OOP (preferiblemente basado en php) estaría muy agradecido.

+0

Esto es muy específico de PHP, supongo. No hay ninguna noción de incluir archivos en OOP. Cualquier archivo de código fuente puede contener de cero a muchas clases. Excepto por algunos lenguajes tontos, donde solo hay una clase por archivo. –

Respuesta

4

La respuesta tecnológica es PHP Autoloading.

La respuesta aplicación es la siguiente:

Un método común utilizado tiene que ver con los nombres de las clases relacionadas con la estructura de carpetas. Hay artículos por ahí, pero aquí hay un breve resumen:

Al configurar su código de carga automática, tome el nombre de la clase y reemplace los guiones bajos por barras diagonales. De esta forma puedes organizar tus clases en carpetas.

Por ejemplo:

Nombre de clase: Database_Provider_MySQL

del archivo: Base de datos/Proveedor/MySQL.php

Así que en carga automática, se tomaría el nombre de clase entrante, reemplazar los guiones con barras. Luego incluye ese archivo específico.

Esto logra lo que está tratando de lograr, simplemente puede cargar una clase creando una nueva instancia de la misma. Nunca tiene que usar la instrucción include para estas clases.

Recuerda no profundizar donde terminas con más de 6 niveles. Creo que entre 3 y 5 es un buen máximo.

Además, esto requiere que solo conserve 1 clase por archivo (similar a Java). Aunque podría parecer un inconveniente, hace que localizar el código sea mucho más fácil.

+1

Buscando algunos términos en esta respuesta encontré un tutorial bastante decente http://www.brainbell.com/tutorials/php/TOC_oop.html – wheresrhys

6

PHP tiene la funcionalidad para cargar automáticamente los archivos en función de alguna llamada que realice. PHP: Autoloading Objects es sus recursos definitivos al respecto.

2

He una observación, aunque soy enorme (eufemismo) fan de PHP (abajo todo lo que quieras votar, no me importa! Un día vamos a ser aceptados ;-), PHP no es realmente el camino que quieres recorrer cuando aprendes OOP.

PHP hace las cosas, bien, diferente. Diferente es bueno, no me malinterpreten, me encanta lo diferente, pero tampoco es convencional. Poco convencional, también bueno, casi un sinónimo de Google, si me preguntas, ¡pero no vivimos en un mundo no convencional! No puedes simplemente acercarte a alguien y decir; "Oye, sé OOP, lo aprendí en PHP". Puede que rime, pero la gente simplemente no te tomará en serio después. No me preguntes por qué, pero es tan cierto como los plátanos amarillos. He estado allí.

así que si quieres aprender OOP convencional, prueba con Java. es tan convencional como vienen (lo cual no es ni malo ni bueno).

Honestamente, nunca me he respaldado tantas veces en una publicación de 20 oraciones. Sin embargo, tengo que ver a ma 'rep. :-D

1

He encontrado que es extremadamente útil mirar el código existente cuando mis esfuerzos de investigación chocan contra una pared. Hay muchos scripts, paquetes, frameworks y aplicaciones que siguen excelentes prácticas de codificación PHP que pueden ser estudiadas y aprendidas. Ha habido varias preguntas sobre SO que señalan algunas buenas.

Mi favorito hasta ahora ha sido el Zend Framework.

2

La configuración de la ruta include_path de PHP indica a PHP qué directorios buscar en los archivos.

Si haces algo como esto:

<?php include 'MyClass.php'; ?> 

Entonces PHP busca en el directorio actual para 'MyClass.php' y luego busca los directorios en el include_path si no puede encontrar el archivo.Muchas bibliotecas de clases hacen algo como esto:

<?php 

// Set the ini page to the base package directory 
ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . dirname(__FILE__)); 

// Now, in all of your sub-directories, you can still do things like this: 
include 'Subdirectory/Anothersub/AnotherClass.php'; 

// Now use the class 
$obj = new AnotherClass(); 

?> 

Se puede simplificar aún más con la auto-carga: http://us.php.net/autoload

Otras bibliotecas solo incluyen todos los archivos que el uso de buenas a primeras en el archivo de paquete base, por lo que todo esas clases están disponibles de inmediato.

2

Diferentes idiomas/frameworks lo hacen de diferentes maneras, pero es esencial que haya una lista incorporada de ubicaciones predeterminadas para buscar y/o puede especificar dónde buscar (cómo hacer esto de nuevo depende del idioma/framework) Sé que la pregunta está etiquetada como php pero la pregunta no menciona específicamente a php, así que pensé en dar una respuesta un poco más general

0

Lo que describes no tiene nada que ver con la programación orientada a objetos per se. Es solo una característica de ciertos lenguajes específicos. Esos idiomas lo hacen imponiendo algún tipo de convención sobre cómo se almacenan los archivos (por ejemplo, la clase foo.bar.quux podría tener que estar en alguna ubicación estándar en foo/bar/quux.py).

0

http://www.headfirstlabs.com/books/hfooad/

La cabeza primero Orientado a Objetos Análisis y Diseño. Head First es una gran serie de libros con ejemplos simples pero sorprendentemente útiles. Toda su forma de presentarte la información es genial. ¡Incluso podrían tener algunos libros de php orientados a objetos también!

Cuestiones relacionadas