diff --git a/src/__phutil_library_init__.php b/src/__phutil_library_init__.php index bcbe5ba..ee442e5 100644 --- a/src/__phutil_library_init__.php +++ b/src/__phutil_library_init__.php @@ -1,68 +1,70 @@ setType('class') ->setName($class_name) ->selectAndLoadSymbols(); if (!$symbols) { throw new PhutilMissingSymbolException( $class_name, pht('class or interface'), pht( "the class or interface '%s' is not defined in the library ". "map for any loaded %s library.", $class_name, 'phutil')); } } catch (PhutilMissingSymbolException $ex) { $should_throw = true; foreach (debug_backtrace() as $backtrace) { if (empty($backtrace['function'])) { continue; } switch ($backtrace['function']) { case 'class_exists': case 'interface_exists': + case 'method_exists': + case 'property_exists': case 'trait_exists': $should_throw = false; break; } } if (!$should_throw) { return false; } // If there are other SPL autoloaders installed, we need to give them a // chance to load the class. Throw the exception if we're the last // autoloader; if not, swallow it and let them take a shot. $autoloaders = spl_autoload_functions(); $last = end($autoloaders); if ($last == __FUNCTION__) { throw $ex; } } } spl_autoload_register('__phutil_autoload', $throw = true); phutil_register_library('phutil', __FILE__);