This would be truly useful for code reuse. I’d love to be able to do something like this that allows to set config settings across all objects, and individually by object:

class Test
{
protected $_config = array();
protected static $_staticConfig = array();

public function __construct($config = array())
{
$this->setConfig($config);
}

public function setConfig($config)
{
$this->_config = array_merge(
$this->_config,
self::$_staticConfig,
$config
);
}

public static function setStaticConfig($config)
{
self::$_staticConfig = $config;
}

protected static function _getConfig($item)
{
if (isset($this)) {
if (isset($this->_config[$item])) {
return $this->_config[$item];
}
} else {
if (isset(self::$_staticConfig[$item])) {
return self::$_staticConfig[$item];
}
}
}
}

But there seems to be no good way to detect how a static method is being called. This unfortunately reduces the usefulness of this language feature.