Skip to content

Commit 97ff916

Browse files
committed
ClassUtil method
1 parent 4664888 commit 97ff916

File tree

3 files changed

+81
-0
lines changed

3 files changed

+81
-0
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,5 @@
33
/vendor/
44

55
main.php
6+
7+
export.txt

src/Util/ClassUtil.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525

2626
namespace doganoo\PHPUtil\Util;
2727

28+
use doganoo\PHPAlgorithms\Datastructure\Lists\ArrayLists\ArrayList;
29+
2830
/**
2931
* Class ClassUtil
3032
*
@@ -128,4 +130,24 @@ public static function getAllProperties($object, bool $asString = true) {
128130
}
129131
}
130132

133+
/**
134+
* @param $object
135+
* @param bool $asObject
136+
* @return ArrayList|null
137+
* @throws \ReflectionException
138+
*/
139+
public static function getAllParentClasses($object, bool $asObject = true): ?ArrayList {
140+
if (!\is_object($object)) return null;
141+
$reflectionClass = new \ReflectionClass($object);
142+
$parentClasses = new ArrayList();
143+
144+
$parentClass = $reflectionClass->getParentClass();
145+
while (false !== $parentClass) {
146+
if ($asObject) $parentClasses->add($parentClass);
147+
else $parentClasses->add($parentClass->getName());
148+
$parentClass = $parentClass->getParentClass();
149+
}
150+
return $parentClasses;
151+
}
152+
131153
}

test/Util/ClassUtilTest.php

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
3+
use doganoo\PHPAlgorithms\Datastructure\Lists\ArrayLists\ArrayList;
4+
use doganoo\PHPUtil\Util\ClassUtil;
5+
use PHPUnit\Framework\TestCase;
6+
7+
class ClassUtilTest extends TestCase {
8+
9+
/**
10+
* @throws ReflectionException
11+
*/
12+
public function testGetParentClasses() {
13+
$parentClasses = ClassUtil::getAllParentClasses("", true);
14+
$this->assertNull($parentClasses);
15+
16+
$parentClasses = ClassUtil::getAllParentClasses(new X(), true);
17+
$this->assertInstanceOf(ArrayList::class, $parentClasses);
18+
19+
$parentClasses = ClassUtil::getAllParentClasses(new Y(), false);
20+
21+
foreach ($parentClasses as $class) {
22+
$this->assertTrue($class === X::class);
23+
}
24+
25+
$parentClasses = ClassUtil::getAllParentClasses(new Z(), false);
26+
27+
foreach ($parentClasses as $class) {
28+
$this->assertTrue($class === X::class || $class === Y::class);
29+
}
30+
31+
$parentClasses = ClassUtil::getAllParentClasses(new Y(), true);
32+
33+
/** @var ReflectionClass $class */
34+
foreach ($parentClasses as $class) {
35+
$this->assertTrue($class->getName() === X::class);
36+
}
37+
38+
$parentClasses = ClassUtil::getAllParentClasses(new Z(), true);
39+
40+
/** @var ReflectionClass $class */
41+
foreach ($parentClasses as $class) {
42+
$this->assertTrue($class->getName() === X::class || $class->getName() === Y::class);
43+
}
44+
}
45+
}
46+
47+
class X {
48+
49+
}
50+
51+
class Y extends X {
52+
53+
}
54+
55+
class Z extends Y {
56+
57+
}

0 commit comments

Comments
 (0)