migration PHP->java

Alexandre

PHPПенсионер
migration PHP->java

не раз уже встречал такой стиль
PHP:
require_once '../libs/import.php';

import('Error.*');
import('Patterns.Visitor');
import('Patterns.Singleton.*');
import('Beans.FrontController.*');
import('Beans.InterceptingFilter.*');
import('Beans.SessionFacade.*');
import('Util.*');
import('ADOdb');
import('OralB.Account');
import('OralB.Additional.*');
 

[DAN]

Старожил PHPClub
Это скорее Java->PHP
Кому как удобнее, тот так и делает. Ничего "криминального" в этом коде я не вижу.
Есть даже один плюс навскидку: возможность более "красиво" обрабатывать ошибку инклюда в import(), не прибегая к всемогущему error_handler`у.
 

Alexandre

PHPПенсионер
говоря о migration PHP->java я имел ввиду стиль программирования. В принципе, кому как нравится.

Есть даже один плюс навскидку: возможность более "красиво" обрабатывать ошибку инклюда в import(), не прибегая к всемогущему error_handler`у.
было-б интерестно примерчик.
 

[DAN]

Старожил PHPClub
хотя бы так:
PHP:
function import( $file )
{
	global	$errors;
	$directory	= dirname(__FILE__).'/';

	if( file_exists($directory.$file) ){
		require_once($directory.$file);
		return TRUE;
	}else{
		$errors[]	= "Unable to include file $directory.$file";
		return FALSE;
	}
}
Вместо глобальной переменной можно ввести доп. аргумент в функции, который будет хранить стек ошибок. Вариантов много.
 

Alexandre

PHPПенсионер
function import( $file ) ..
забыл включить str_replace() замены точки на слеш
PHP:
function import($namespace='*')
{
    $skip       = Array('.', '..', 'examples', 'tests');
    $package    = split('\.', $namespace);
    $importAll  = '*' === $package[sizeOf($package)-1]
                ? true
                : false;
    if ( $importAll )
    {
        unset($package[sizeOf($package)-1]);
        $file   = null;
    }
    $path       = IMPORT_INCLUDE_PATH . join('/', $package);
    if ( $importAll )
    {
        $d      = @dir($path) or trigger_error('Unknown package <b>'. $namespace .'</b> for import', E_USER_ERROR);
        while ( false !== ($entry = $d->read()) )
        {
            if ( in_array($entry, $skip) )      continue;
            if ( is_file($path .'/'. $entry) )  require_once $path .'/'. $entry;
            if ( is_dir($path .'/'. $entry) )
            {
                import(join('.', $package) .'.'. $entry .'.*');
            }
        }
        $d->close();
    }
    else
    {
        foreach (Array('external', 'package', 'interface', 'class') as $pkg)
        {
            $file   = $path .'/'. $pkg .'.'. $package[sizeOf($package)-1] .'.php';
            if ( is_file($file) )
            {
                require_once $file;
                return  true;
            }
        }
        $file   = $path .'/interface.'. $package[sizeOf($package)-1] .'.php';
        trigger_error('Unknown package <b>'. $namespace .'</b> for import', E_USER_ERROR);
        return  false;
    }
}
 
Сверху