Я жил в стране хранимой процедуры ETL для многотерабайтного хранилища данных SQL Server. Это решение было принято еще в 2001 году, когда .NET был 1.0, поэтому VB6 был альтернативой языка программирования, а SSIS еще не существовал - это был DTS. Я могу сказать вам, что были преимущества и недостатки, как и все.
Некоторые соображения:
Кстати, после того, как я покинул эту компанию, они наконец обновили базу данных с SQL 2000 до 2008 и медленно перешли с хранимых процедур на SSIS. В моей новой компании у нас есть SSIS, но после его использования мы все согласились с тем, что наш заказный .NET ETL лучше подходит для наших целей. Каждый идет своим путем. Решение должно сбалансировать обслуживание и производительность, а также набор навыков вашей команды и набор навыков пула заданий в вашем регионе.
Это не ошибка, это проектное решение :
Примечание : исключения, возникающие в функции
__ autoload
, не могут быть перехвачены блокcatch
и приводит к фатальной ошибке.
Причина в том, что может быть более одного обработчика автозагрузки, и в этом случае вы не хотите, чтобы первый обработчик генерировал исключение и обходил второй обработчик. Вы хотите, чтобы у вашего второго обработчика была возможность автозагрузки своих классов. Если вы используете библиотеку, которая использует функцию автозагрузки, вы не хотите, чтобы она обходила ваш обработчик автозагрузки, потому что они генерируют исключения внутри своего автозагрузчика.
Если вы хотите проверить, можете ли вы создать экземпляр класса, используйте class_exists
и передайте true
в качестве второго аргумента (или оставьте его, true
по умолчанию):
if (class_exists('foobarDomain', $autoload = true)) {
$domain = new foobarDomain();
} else {
echo 'Class not found';
}
Согласно комментариям в документации для spl_autoload_register , из автозагрузчика можно вызвать другую функцию, которая, в свою очередь, вызовет исключение.
class SPLAutoLoader{
public static function autoloadDomain($className) {
if(file_exists('test/'.$className.'.class.php')){
require_once('test/'.$className.'.class.php');
return true;
}
self::throwFileNotFoundException();
}
public static function throwFileNotFoundException()
{
throw new Exception('File not found');
}
} //end class
//start
spl_autoload_register( array('SPLAutoLoader', 'autoloadDomain') );
try{
$domain = new foobarDomain();
}catch(Exception $c){
echo 'File not found';
}