Buenass el tema de los package o de los imports la verdad es que cuando se trata de php5 no le doy importancia y/o no es realmente necesario. <-- Y cuidado se lo que me digo (los programadores profesionales saben a lo que me refiero ;) )
Aunque a veces puede llegar a resultar útil cuando tienes un servidor que compartes aplicaciones o codigo aunque sigo sin verle utilidad.... aún así yo tenía un código que trabajaba con package si os sirve de algo os pongo un ejemplo de proyecto:
en nuestro directorio raiz crearemos el projecto(lo llamaremos package para ser originales ^^):
/opt/lampp/htdocs/package <-- linux (xampp)
c:\xampp\htdocs\package <-- windows (xampp)
estructura del proyecto:
Código:
package
| - index.php
| - package.php
| + com
| + programs
| + saludo
| - Contienente.php
| - Mundo.php
| - Pais.php
Bien una vez creada la estructura ponemos algo de codigo en nuestro ejemplo:
Bien esta sera nuestra aplicación (com/programs/saludo):
Continente.php
Código PHP:
class Continente{
public function getSaludo(){
return "Hola desde Europa";
}
}
Mundo.php
Código PHP:
class Mundo{
public function getSaludo(){
return "Hola Mundo!!";
}
}
Código PHP:
class Pais{
public function getSaludo(){
return "Hola desde Catalunya";
}
}
Ahora en el directorio raiz crearemos el fichero package.php
Código PHP:
<?php
class PackageException extends Exception { }
function import($class, $dirs = null)
{
$path = str_replace('.', DIRECTORY_SEPARATOR, $class);
$pathArray = split('\.',$class);
if(count($pathArray)<=1)
throw new PackageException("Error en la inclusion\"$path\"");
if(end($pathArray) == "*")
{
array_pop($pathArray);
$path = implode(DIRECTORY_SEPARATOR,$pathArray);
$fullPath = dirname(__FILE__).DIRECTORY_SEPARATOR.$path;
$dirObj = new DirectoryIterator($fullPath);
foreach ($dirObj as $nombrefichero){
if(is_file($fullPath.DIRECTORY_SEPARATOR.$nombrefichero))
{
require_once($fullPath.DIRECTORY_SEPARATOR.$nombrefichero);
}
}
}else{
if (class_exists($class, false)) {
return;
}
if ($dirs === null && $path != $class) {
$dirs = dirname($path);
$file = basename($path) . '.php';
} else {
$file = $class . '.php';
}
if (!class_exists($class, false)) {
throw new PackageException("El fichero \"$file\" ha sido cargado "
. "pero la clase \"$class\" no ha sido encontrada.");
}
}
}
?>
y por último el fichero index.php
Código PHP:
<?php
include("Package.php");
import("com.programs.Saludo.*");
$saludo = new Mundo();
echo $saludo->getSaludo()."<br />";
$saludo = new Continente();
echo $saludo->getSaludo()."<br />";;
$saludo = new Pais();
echo $saludo->getSaludo()."<br />";
?>
La salida por pantalla seria:
Hola Mundo!!
Hola desde Europa
Hola desde Catalunya
También podriamos haber cargado las clases de una en una declarandolas explicitamente:
Código PHP:
<?php
include("Package.php");
import("com.programs.Saludo.Mundo");
import("com.programs.Saludo.Continente");
import("com.programs.Saludo.Pais");
$saludo = new Mundo();
echo $saludo->getSaludo()."<br />";
$saludo = new Continente();
echo $saludo->getSaludo()."<br />";;
$saludo = new Pais();
echo $saludo->getSaludo()."<br />";
?>