Ver Mensaje Individual
  #24 (permalink)  
Antiguo 26/11/2006, 17:51
Casuis
 
Fecha de Ingreso: septiembre-2005
Mensajes: 142
Antigüedad: 18 años, 7 meses
Puntos: 3
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($classfalse)) {
            return;
        }

        if (
$dirs === null && $path != $class) {
            
$dirs dirname($path);
            
$file basename($path) . '.php';
        } else {
            
$file $class '.php';
        }


        if (!
class_exists($classfalse)) {
            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 />";

?>

Última edición por Casuis; 26/11/2006 a las 18:22