mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 12:05:37 +00:00
MINOR Documented ClassInfo::subclassesFor() and added unit tests
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.3@67689 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
parent
b2c88c2f5b
commit
d9b3abf8ac
@ -101,16 +101,36 @@ class ClassInfo {
|
||||
|
||||
/**
|
||||
* Returns a list of classes that inherit from the given class.
|
||||
* The resulting array includes the base class passed
|
||||
* through the $class parameter as the first array value.
|
||||
*
|
||||
* Example usage:
|
||||
* <example>
|
||||
* ClassInfo::subclassesFor('BaseClass');
|
||||
* array(
|
||||
* 0 => 'BaseClass',
|
||||
* 'ChildClass' => 'ChildClass',
|
||||
* 'GrandChildClass' => 'GrandChildClass'
|
||||
* )
|
||||
* </example>
|
||||
*
|
||||
* @param mixed $class string of the classname or instance of the class
|
||||
* @return array
|
||||
* @return array Names of all subclasses as an associative array.
|
||||
*/
|
||||
static function subclassesFor($class){
|
||||
global $_ALL_CLASSES;
|
||||
if (is_object($class)) $class = get_class($class);
|
||||
|
||||
// get all classes from the manifest
|
||||
$subclasses = isset($_ALL_CLASSES['children'][$class]) ? $_ALL_CLASSES['children'][$class] : null;
|
||||
if(isset($subclasses)) array_unshift($subclasses, $class);
|
||||
else $subclasses[$class] = $class;
|
||||
|
||||
// add the base class to the array
|
||||
if(isset($subclasses)) {
|
||||
array_unshift($subclasses, $class);
|
||||
} else {
|
||||
$subclasses[$class] = $class;
|
||||
}
|
||||
|
||||
return $subclasses;
|
||||
}
|
||||
|
||||
|
33
tests/ClassInfoTest.php
Normal file
33
tests/ClassInfoTest.php
Normal file
@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* @package sapphire
|
||||
* @subpackage tests
|
||||
*/
|
||||
class ClassInfoTest extends SapphireTest {
|
||||
|
||||
function testSubclassesFor() {
|
||||
$this->assertEquals(
|
||||
ClassInfo::subclassesFor('ClassInfoTest_BaseClass'),
|
||||
array(
|
||||
0 => 'ClassInfoTest_BaseClass',
|
||||
'ClassInfoTest_ChildClass' => 'ClassInfoTest_ChildClass',
|
||||
'ClassInfoTest_GrandChildClass' => 'ClassInfoTest_GrandChildClass'
|
||||
),
|
||||
'ClassInfo::subclassesFor() returns only direct subclasses and doesnt include base class'
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class ClassInfoTest_BaseClass {
|
||||
|
||||
}
|
||||
|
||||
class ClassInfoTest_ChildClass extends ClassInfoTest_BaseClass {
|
||||
|
||||
}
|
||||
|
||||
class ClassInfoTest_GrandChildClass extends ClassInfoTest_ChildClass {
|
||||
|
||||
}
|
||||
?>
|
Loading…
x
Reference in New Issue
Block a user