{ public static final function getInstance() { return parent::getInstance(); } public static final function removeInstance() { parent::removeInstance(); } } //using class FirstProduct extends Factory { public $keys = []; } class SecondProduct extends FirstProduct { } FirstProduct::getInstance()->keys[] = 1; SecondProduct::getInstance()->keys[] = 2; FirstProduct::getInstance()->keys[] = 3; SecondProduct::getInstance()->keys[] = 4; FirstProduct::getInstance()->keys[] = 5; var_dump(FirstProduct::getInstance()->keys); var_dump(SecondProduct::getInstance()->keys); var_dump(FactoryAbstract::getInstanceList()); FirstProduct::removeInstance(); var_dump(FactoryAbstract::getInstanceList()); var_dump(FirstProduct::getInstance()->keys); var_dump(SecondProduct::getInstance()->keys); var_dump(FactoryAbstract::getInstanceList());