public function getClassEntryByClassName($className, CompilationContext $compilationContext, $check = true) { $this->compiler = $compilationContext->compiler; switch (strtolower($className)) { /** * Zend classes */ case 'exception': $classEntry = 'zend_exception_get_default(TSRMLS_C)'; break; /** * Zend interfaces (Zend/zend_interfaces.h) */ /** * Zend interfaces (Zend/zend_interfaces.h) */ case 'iterator': $classEntry = 'zend_ce_iterator'; break; case 'arrayaccess': $classEntry = 'zend_ce_arrayaccess'; break; case 'serializable': $classEntry = 'zend_ce_serializable'; break; case 'iteratoraggregate': $classEntry = 'zend_ce_aggregate'; break; /** * SPL Exceptions */ /** * SPL Exceptions */ case 'logicexception': $compilationContext->headersManager->add('ext/spl/spl_exceptions'); $classEntry = 'spl_ce_LogicException'; break; case 'badfunctioncallexception': $compilationContext->headersManager->add('ext/spl/spl_exceptions'); $classEntry = 'spl_ce_BadFunctionCallException'; break; case 'badmethodcallexception': $compilationContext->headersManager->add('ext/spl/spl_exceptions'); $classEntry = 'spl_ce_BadMethodCallException'; break; case 'domainexception': $compilationContext->headersManager->add('ext/spl/spl_exceptions'); $classEntry = 'spl_ce_DomainException'; break; case 'invalidargumentexception': $compilationContext->headersManager->add('ext/spl/spl_exceptions'); $classEntry = 'spl_ce_InvalidArgumentException'; break; case 'lengthexception': $compilationContext->headersManager->add('ext/spl/spl_exceptions'); $classEntry = 'spl_ce_LengthException'; break; case 'outofrangeexception': $compilationContext->headersManager->add('ext/spl/spl_exceptions'); $classEntry = 'spl_ce_OutOfRangeException'; break; case 'runtimeexception': $compilationContext->headersManager->add('ext/spl/spl_exceptions'); $classEntry = 'spl_ce_RuntimeException'; break; case 'outofboundsexception': $compilationContext->headersManager->add('ext/spl/spl_exceptions'); $classEntry = 'spl_ce_OutOfBoundsException'; break; case 'overflowexception': $compilationContext->headersManager->add('ext/spl/spl_exceptions'); $classEntry = 'spl_ce_OverflowException'; break; case 'rangeexception': $compilationContext->headersManager->add('ext/spl/spl_exceptions'); $classEntry = 'spl_ce_RangeException'; break; case 'underflowexception': $compilationContext->headersManager->add('ext/spl/spl_exceptions'); $classEntry = 'spl_ce_UnderflowException'; break; case 'unexpectedvalueexception': $compilationContext->headersManager->add('ext/spl/spl_exceptions'); $classEntry = 'spl_ce_UnexpectedValueException'; break; /** * SPL Iterators Interfaces (spl/spl_iterators.h) */ /** * SPL Iterators Interfaces (spl/spl_iterators.h) */ case 'recursiveiterator': $compilationContext->headersManager->add('ext/spl/spl_iterators'); $classEntry = 'spl_ce_RecursiveIterator'; break; case 'recursiveiteratoriterator': $compilationContext->headersManager->add('ext/spl/spl_iterators'); $classEntry = 'spl_ce_RecursiveIteratorIterator'; break; case 'recursivetreeiterator': $compilationContext->headersManager->add('ext/spl/spl_iterators'); $classEntry = 'spl_ce_RecursiveTreeIterator'; break; case 'filteriterator': $compilationContext->headersManager->add('ext/spl/spl_iterators'); $classEntry = 'spl_ce_FilterIterator'; break; case 'recursivefilteriterator': $compilationContext->headersManager->add('ext/spl/spl_iterators'); $classEntry = 'spl_ce_RecursiveFilterIterator'; break; case 'parentiterator': $compilationContext->headersManager->add('ext/spl/spl_iterators'); $classEntry = 'spl_ce_ParentIterator'; break; case 'seekableiterator': $compilationContext->headersManager->add('ext/spl/spl_iterators'); $classEntry = 'spl_ce_SeekableIterator'; break; case 'limititerator': $compilationContext->headersManager->add('ext/spl/spl_iterators'); $classEntry = 'spl_ce_LimitIterator'; break; case 'cachingiterator': $compilationContext->headersManager->add('ext/spl/spl_iterators'); $classEntry = 'spl_ce_CachingIterator'; break; case 'recursivecachingiterator': $compilationContext->headersManager->add('ext/spl/spl_iterators'); $classEntry = 'spl_ce_RecursiveCachingIterator'; break; case 'outeriterator': $compilationContext->headersManager->add('ext/spl/spl_iterators'); $classEntry = 'spl_ce_OuterIterator'; break; case 'iteratoriterator': $compilationContext->headersManager->add('ext/spl/spl_iterators'); $classEntry = 'spl_ce_IteratorIterator'; break; case 'norewinditerator': $compilationContext->headersManager->add('ext/spl/spl_iterators'); $classEntry = 'spl_ce_NoRewindIterator'; break; case 'infiniteiterator': $compilationContext->headersManager->add('ext/spl/spl_iterators'); $classEntry = 'spl_ce_InfiniteIterator'; break; case 'emptyiterator': $compilationContext->headersManager->add('ext/spl/spl_iterators'); $classEntry = 'spl_ce_EmptyIterator'; break; case 'appenditerator': $compilationContext->headersManager->add('ext/spl/spl_iterators'); $classEntry = 'spl_ce_AppendIterator'; break; case 'regexiterator': $compilationContext->headersManager->add('ext/spl/spl_iterators'); $classEntry = 'spl_ce_RegexIterator'; break; case 'recursiveregexiterator': $compilationContext->headersManager->add('ext/spl/spl_iterators'); $classEntry = 'spl_ce_RecursiveRegexIterator'; break; case 'directoryiterator': $compilationContext->headersManager->add('ext/spl/spl_directory'); $classEntry = 'spl_ce_DirectoryIterator'; break; case 'filesystemiterator': $compilationContext->headersManager->add('ext/spl/spl_directory'); $classEntry = 'spl_ce_FilesystemIterator'; break; case 'recursivedirectoryiterator': $compilationContext->headersManager->add('ext/spl/spl_directory'); $classEntry = 'spl_ce_RecursiveDirectoryIterator'; break; case 'globiterator': $compilationContext->headersManager->add('ext/spl/spl_directory'); $classEntry = 'spl_ce_GlobIterator'; break; case 'splfileobject': $compilationContext->headersManager->add('ext/spl/spl_directory'); $classEntry = 'spl_ce_SplFileObject'; break; case 'spltempfileobject': $compilationContext->headersManager->add('ext/spl/spl_directory'); $classEntry = 'spl_ce_SplTempFileObject'; break; case 'countable': $compilationContext->headersManager->add('ext/spl/spl_iterators'); $classEntry = 'spl_ce_Countable'; break; case 'callbackfilteriterator': $compilationContext->headersManager->add('ext/spl/spl_iterators'); $classEntry = 'spl_ce_CallbackFilterIterator'; break; case 'recursivecallbackfilteriterator': $compilationContext->headersManager->add('ext/spl/spl_iterators'); $classEntry = 'spl_ce_RecursiveCallbackFilterIterator'; break; case 'arrayobject': $compilationContext->headersManager->add('ext/spl/spl_array'); $classEntry = 'spl_ce_ArrayObject'; break; case 'splfixedarray': $compilationContext->headersManager->add('ext/spl/spl_fixedarray'); $classEntry = 'spl_ce_SplFixedArray'; break; case 'splpriorityqueue': $compilationContext->headersManager->add('ext/spl/spl_heap'); $classEntry = 'spl_ce_SplPriorityQueue'; break; case 'splfileinfo': $compilationContext->headersManager->add('ext/spl/spl_directory'); $classEntry = 'spl_ce_SplFileInfo'; break; case 'splheap': $compilationContext->headersManager->add('ext/spl/spl_heap'); $classEntry = 'spl_ce_SplHeap'; break; case 'splminheap': $compilationContext->headersManager->add('ext/spl/spl_heap'); $classEntry = 'spl_ce_SplMinHeap'; break; case 'splmaxheap': $compilationContext->headersManager->add('ext/spl/spl_heap'); $classEntry = 'spl_ce_SplMaxHeap'; break; case 'splstack': $compilationContext->headersManager->add('ext/spl/spl_dllist'); $classEntry = 'spl_ce_SplStack'; break; case 'splqueue': $compilationContext->headersManager->add('ext/spl/spl_dllist'); $classEntry = 'spl_ce_SplQueue'; break; case 'spldoublylinkedlist': $compilationContext->headersManager->add('ext/spl/spl_dllist'); $classEntry = 'spl_ce_SplDoublyLinkedList'; break; case 'stdclass': $classEntry = 'zend_standard_class_def'; break; case 'closure': $compilationContext->headersManager->add('Zend/zend_closures'); $classEntry = 'zend_ce_closure'; break; case 'pdo': $compilationContext->headersManager->add('ext/pdo/php_pdo_driver'); $classEntry = 'php_pdo_get_dbh_ce()'; break; case 'pdostatement': $compilationContext->headersManager->add('kernel/main'); $classEntry = $compilationContext->backend->fetchClassEntry("pdostatement"); break; case 'pdoexception': $compilationContext->headersManager->add('ext/pdo/php_pdo_driver'); $classEntry = 'php_pdo_get_exception()'; break; case 'datetime': $compilationContext->headersManager->add('ext/date/php_date'); $classEntry = 'php_date_get_date_ce()'; break; case 'datetimezone': $compilationContext->headersManager->add('ext/date/php_date'); $classEntry = 'php_date_get_timezone_ce()'; break; // Reflection /*case 'reflector': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflector_ptr'; break; case 'reflectionexception': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_exception_ptr'; break; case 'reflection': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_ptr'; break; case 'reflectionfunctionabstract': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_function_abstract_ptr'; break; case 'reflectionfunction': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_function_ptr'; break; case 'reflectionparameter': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_parameter_ptr'; break; case 'reflectionclass': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_class_ptr'; break; case 'reflectionobject': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_object_ptr'; break; case 'reflectionmethod': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_method_ptr'; break; case 'reflectionproperty': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_property_ptr'; break; case 'reflectionextension': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_extension_ptr'; break; case 'reflectionzendextension': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_zend_extension_ptr'; break;*/ // Reflection /*case 'reflector': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflector_ptr'; break; case 'reflectionexception': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_exception_ptr'; break; case 'reflection': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_ptr'; break; case 'reflectionfunctionabstract': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_function_abstract_ptr'; break; case 'reflectionfunction': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_function_ptr'; break; case 'reflectionparameter': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_parameter_ptr'; break; case 'reflectionclass': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_class_ptr'; break; case 'reflectionobject': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_object_ptr'; break; case 'reflectionmethod': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_method_ptr'; break; case 'reflectionproperty': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_property_ptr'; break; case 'reflectionextension': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_extension_ptr'; break; case 'reflectionzendextension': $compilationContext->headersManager->add('ext/reflection/php_reflection'); $classEntry = 'reflection_zend_extension_ptr'; break;*/ default: if (!$check) { throw new CompilerException('Unknown class entry for "' . $className . '"'); } else { $classEntry = $compilationContext->backend->fetchClassEntry(Utils::escapeClassName(strtolower($className))); } } return $classEntry; }