Looks sort of like you're trying to accomplish a singleton pattern, using the App class to control them all. Try this approach instead:
<?php
// Base / abstract class that defines a basic singleton pattern
abstract class SingletonProvider
{
// Singleton pattern
protected static $_instance;
public static function getInstance()
{
if(static::$_instance == null)
{
static::$_instance = new static();
}
return static::$_instance;
}
// Private constructor
private function __construct() { }
}
// A specific provider class definition that inherits the singleton pattern
class MyProvider extends SingletonProvider
{
// Class-specific instance reference
protected static $_instance;
// --- CLASS INSTANCE-SPECIFIC PROPERTIES AND METHODS BELOW HERE ---
// Class properties
public $FieldX;
protected function __construct()
{
$this->FieldX = "Hello World!";
}
}
// Another specific provider class definition that inherits the singleton pattern
class MyOtherProvider extends SingletonProvider
{
// Class-specific instance reference
protected static $_instance;
// --- CLASS INSTANCE-SPECIFIC PROPERTIES AND METHODS BELOW HERE ---
// Class properties
public $FieldY;
protected function __construct()
{
$this->FieldY = "Foo";
}
public function MakeMoreExciting($sentence)
{
return $sentence . "!!!!!!!!";
}
}
// Usage examples
echo MyProvider::getInstance()->FieldX; // Hello World!
echo MyOtherProvider::getInstance()->FieldY; // Foo
echo MyOtherProvider::getInstance()->MakeMoreExciting("Hi there"); // Hi there!!!!!!!!