No entiendo tu ejemplo, cuando tu haces:
archivo: ejemplo.php
Código PHP:
$foo = "foo desde ejemplo";
archivo: index.php
Código PHP:
$foo = "foo inicial";
include( "ejemplo.php" );
echo $foo;
Es lo mismo que esto:
Código PHP:
$foo = "foo inicial";
$foo = "foo desde ejemplo";
echo $foo;
Es decir, al usar el include el interprete de PHP incluye el archivo en el punto desde donde se llama y ejecuta el contenido, asi que aqui no estas aplicando Singleton correctamente.
Singleton es la capacidad de usar un objeto mismo en todos los ambitos de ejecucion (en PHP es en cada request), imagina algo asi:
Código PHP:
class A {
public function algoA() {
$obj = Singleton::getInstance();
$obj->setValor( "Valor alterado en A" );
}
}
class B {
public function algoB() {
$obj = Singleton::getInstance();
$obj->setValor("Valor alterado desde B");
}
}
class C {
public function algoC() {
$obj = Singleton::getInstance();
$obj->setValor("Valor cambiado desde C!");
}
}
$a = new A();
$b = new B();
$c = new C();
$instance = Singleton::getInstance();
echo sprintf( "Viendo valor inicial de Singleton: %s", $instance->getValor() );
echo "Alterando desde A";
$a->algoA();
echo sprintf( "Valor de Singleton: %s", $instance->getValor() );
echo "Alterando desde B";
$b->algoB();
echo sprintf( "Valor de Singleton: %s", $instance->getValor() );
echo "Alterando desde C";
$c->algoC();
echo sprintf( "Valor de Singleton: %s", $instance->getValor() );
Aqui como puedes ver 3 clases diferentes usan el mismo objeto y alteran su valor, y pueden estar regados en archivos diferentes (cada clase en su file) pero todos se refieren al mismo objeto en el runtime a la hora de usar el Singleton que es la clase unica.
Saludos.