se invece il test lo faccio sull'array funziona

$istance = $instances[$className];

if (!is_object($instances[$className])) {
echo "!is_object(\$instances[$className])";
} else {
echo "is_object(\$instances[$className])";
}
"is_object"



if (!is_object($instance)) {
echo "!is_object(\$instance)";
}else{
echo "is_object(\$instance)";
}
"!is_object"

deve essere un problema di scope
provo ad utilizzare un array statico di classe anzichè di funzione