Nie wiem dokladnie jak w Javie wyrazenie import dziala, ale u mnie wykombinowalem cos takiego (moze komus sie przyda):
[php:1:8aa77e4482]
<?php
/**
* Import system class to global namespace
* @param string $s
* @return void
* @access public
* @package import
*/
function import($s) {
static $root;
if (!isset($root)) {
$root = realpath(dirname(__FILE__) . '/../') . '/';
}
static $imported = array();
if (isset($imported[$s])) {
return;
}
$arr = explode('.', $s);
if (is_dir($root . implode('/', $arr))) {
$arr[] = $arr[count($arr) - 1];
}
$file = $root . implode('/', $arr) . '.php';
if (!file_exists($file) || !is_file($file)) {
return trigger_error("import() failed, could not import `$s`", E_USER_ERROR);
}
require_once $file;
$imported[$s] = true;
}
?>
[/php:1:8aa77e4482]
Jest kilka katalogow z bibliotekami, ponizej listing, jak sa rozlozone libsy systemowe (czyli takie ktore nie sa w zaden sposob powiazane z dana aplikacja - ogolne, przydatne w wielu aplikacjach)
Kod
system/
system/.htaccess
system/Dataspace.php
system/Example.php
system/import.php
system/license.txt
system/printR.php
system/Random.php
system/Stack.php
system/Config/
system/Config/Ini.php
system/Date/
system/Date/Common.php
system/Date/const.php
system/Date/Date.php
system/Date/Gmt.php
system/Date/Local.php
system/Date/Utility.php
system/Db/
system/Db/Db.php
system/Db/Debug.php
system/Db/debug.tpl
system/Db/Pager.php
system/Db/Mysql/
system/Db/Mysql/Mysql.php
system/Db/Mysql/Result.php
system/Db/Oci8/
system/Db/Oci8/oci8.php
system/Db/Oci8/Result.php
system/Db/Oci8/utlxplan.sql
system/Db/Pgsql/
system/Db/Pgsql/Pgsql.php
system/Db/Pgsql/Result.php
system/Db/Sql/
system/Db/Sql/Result.php
system/Db/Sql/Sql.php
system/Error/
system/Error/Handler/
system/Error/Handler/error.tpl
system/Error/Handler/Handler.php
system/Error/Handler/showSource.php
system/Html/
system/Html/Tag.php
system/Http/
system/Http/Cookie.php
system/Http/Request.php
system/Http/Response.php
system/Http/Utility.php
system/Http/Var.php
system/Http/Session/Session.php
system/Http/Session/Handler/Db.php
system/Http/Upload/Upload.php
system/Http/Upload/File.php
system/Image/
system/Image/Image.php
system/Image/Utility.php
system/Io/
system/Io/Directory.php
system/Io/File.php
system/Io/Path.php
system/Mail/
system/Mail/Mail.php
system/Mail/Utility.php
system/String/
system/String/String.php
system/String/Utility.php
system/Template/
system/Template/Plugin.php
system/Template/Template.php
system/Template/plugins/
system/Template/plugins/cycle.php
system/Template/plugins/escape.php
system/Template/plugins/htmlcheckboxes.php
system/Template/plugins/htmloptions.php
system/Template/plugins/htmlselectdate.php
system/Template/plugins/truncate.php
system/Unique/
system/Unique/mysql.sql
system/Unique/oci8.sql
system/Unique/Unique.php
Przyklady:
[php:1:8aa77e4482]
import('system.Http.Var');
import('system.Db');
import('system.Http.Cookie');
[/php:1:8aa77e4482]
Funkcja import dziala w ten sposob, ze jak bede chcial rozbudowac dana klase to nie bede musial zmieniac kodu aplikacji
Czyli w aplikacji wpisujac
[php:1:8aa77e4482]
import('system.Dataspace');
[/php:1:8aa77e4482]
Klasa zostanie includnieta, niezaleznie czy struktura bedzie taka:
Kod
system/Dataspace.php
czy taka:
Kod
system/Dataspace/
system/Dataspace/Dataspace.php
system/Dataspace/Costam.php
Biblioteki ogolne powiazane w jakikolwiek sposob z dana aplikacja trzymam w katalogu "application/".
Tam struktura klas jest podobna. np.
[php:1:8aa77e4482]
import('application.Registry');
import('application.Test.Connection');
[/php:1:8aa77e4482]
Myslalem tez nad zaimplementowaniem gwiazdki * w funkcji import czyli cos w stylu:
[php:1:8aa77e4482]
import('system.Http.*');
[/php:1:8aa77e4482]
Ale na razie jest to niepotrzebne, pozatym powstalby niepotrzebny narzut, gdyz na razie nie spotkalem sie z sytuacja zebym potrzebowal wszystkich klas z danego katalogu.