/** * Extracts the package name of a qualified PHP 5.3 class identifier. * * If the class name doesn't contain a package identifier this method will * return the default identifier. * * <code> * $packageName = $this->extractPackageName('foo\bar\foobar'); * var_dump($packageName); * // Results in: * // string(8) "foo\bar" * * $packageName = $this->extractPackageName('foobar'); * var_dump($packageName); * // Results in: * // string(6) "+global" * </code> * * @param string $qualifiedName The qualified PHP 5.3 class identifier. * * @return string */ protected function extractPackageName($qualifiedName) { if (($pos = strrpos($qualifiedName, '\\')) !== false) { // Extract namespace part from qualified name $namespaceName = substr($qualifiedName, 0, $pos); // Check for leading backslash if (strpos($namespaceName, '\\') === 0) { return substr($namespaceName, 1); } return $namespaceName; } else { if (PHP_Depend_Util_Type::isInternalType($qualifiedName)) { return PHP_Depend_Util_Type::getTypePackage($qualifiedName); } } return self::DEFAULT_PACKAGE; }
/** * testGetTypePackageReturnsExpectedExtensionNameForClassPrefixedWithBackslash * * @return void * @covers PHP_Depend_Util_Type::getTypePackage * @group pdepend * @group pdepend::util * @group unittest */ public function testGetTypePackageReturnsExpectedExtensionNameForClassPrefixedWithBackslash() { $extensionName = PHP_Depend_Util_Type::getTypePackage('\\LogicException'); $this->assertEquals('+spl', $extensionName); }
/** * This method reads all available classes and interfaces and checks whether * this type belongs to an extension or is internal. All internal and extension * classes are collected in an internal data structure. * * @return array(string=>string) */ private static function _initTypeToExtension() { // Skip when already done. if (self::$_typeNameToExtension !== null) { return self::$_typeNameToExtension; } self::$_typeNameToExtension = array('iterator' => '+standard'); $extensionNames = get_loaded_extensions(); $extensionNames = array_map('strtolower', $extensionNames); foreach ($extensionNames as $extensionName) { $extension = new ReflectionExtension($extensionName); $classNames = $extension->getClassNames(); $classNames = array_map('strtolower', $classNames); foreach ($classNames as $className) { self::$_typeNameToExtension[$className] = '+' . $extensionName; } } return self::$_typeNameToExtension; }
/** * Extracts non scalar types from a field doc comment and creates a * matching type instance. * * @return PHP_Depend_Code_ASTClassOrInterfaceReference * @since 0.9.6 */ private function _parseFieldDeclarationClassOrInterfaceReference() { $annotations = $this->_parseVarAnnotation($this->_docComment); foreach ($annotations as $annotation) { if (PHP_Depend_Util_Type::isScalarType($annotation) === false) { return $this->builder->buildASTClassOrInterfaceReference($annotation); } } return null; }
/** * Extracts the package name of a qualified PHP 5.3 class identifier. * * If the class name doesn't contain a package identifier this method will * return the default identifier. * * <code> * $packageName = $this->extractPackageName('foo\bar\foobar'); * var_dump($packageName); * // Results in: * // string(8) "foo\bar" * * $packageName = $this->extractPackageName('foobar'); * var_dump($packageName); * // Results in: * // string(6) "+global" * </code> * * @param string $qualifiedName The qualified PHP 5.3 class identifier. * * @return string */ protected function extractPackageName($qualifiedName) { if (($pos = strrpos($qualifiedName, '\\')) !== false) { return ltrim(substr($qualifiedName, 0, $pos), '\\'); } else { if (PHP_Depend_Util_Type::isInternalType($qualifiedName)) { return PHP_Depend_Util_Type::getTypePackage($qualifiedName); } } return self::DEFAULT_PACKAGE; }
/** * testIsArrayPerformsCheckCaseInsensitive * * @return void */ public function testIsArrayPerformsCheckCaseInsensitive() { self::assertTrue(PHP_Depend_Util_Type::isArrayType('ArRaY')); }