Instância de verificação de classe média em PHP
Meu problema é que estendi muitas classes da BaseClass.
Mas eu precisava apenas das classes que estão se estendendo de uma determinada classe (MiddleClass) dentro da cadeia,
por exemplo:
SecondClass extends ->
FirstClass extends ->
BaseClass
ThirdClass extends ->
SecondClass extends ->
MiddleClass extends ->
FirstClass extends ->
BaseClass
FourthClass extends ->
SecondClass extends ->
MiddleClass extends ->
FirstClass extends ->
BaseClass
Como estou em um loop, não seria recomendado fazer isso:
if ($myclass instanceoff ThirdClass || $myclass instanceoff FourthClass) then do;
em vez disso, implementei um método para fazer isso
if ($myclass->isInstanceof(MiddleClass)) then do;
aqui está como fazer isso
class BaseClass
{
public function getInstances($instance = null, $list = array())
{
if (is_null($instance)) {
$instance = $this;
}
$parent = get_parent_class($instance);
if ($parent) {
$list[] = $parent;
$list = self::getInstances($parent, $list);
}
return $list;
}
public function isInstanceOf($class)
{
foreach ($this->getInstances() as $instance) {
if (strpos($instance, $class) !== false) {
return true;
}
}
return false;
}
}
class FirstClass extends BaseClass
{
}
class SecondClass extends FirstClass
{
}
$SecondClass = new SecondClass();
$result = $SecondClass->isInstanceOf("FirstClass");
var_dump($result);