$GLOBALS나 Context를 거쳐서 static member 변수를 흉내내는 것을 대신하기 위해, Pseudo Static Member 클래스를 만들어 보았습니다.

PSM.php
<?php
$PSM_var = array();

class PSM // Pseudo Static Member
{
    function getCallerClass()
    {
        $trace = debug_backtrace();

        if(!isset($trace[2]))
            return null;

        if(empty($trace[2]['class']))
            return null;

        return strtolower($trace[2]['class']);
    }

    function &v($name)
    {
        global $PSM_var;

        $class = PSM::getCallerClass();
        if(!$class) // Caller is a global function
            $class = '__global';

        if(!isset($PSM_var[$class][$name]))
            $PSM_var[$class][$name] = null;

        return $PSM_var[$class][$name];
    }

    function &vc($class, $name)
    {
        global $PSM_var;

        $class = strtolower($class);

        if(!isset($PSM_var[$class][$name]))
            $PSM_var[$class][$name] = null;

        return $PSM_var[$class][$name];
    }
}

class TestClass
{
    function someFunc()
    {
        $someStatic = &PSM::v('someStatic'); // use it like TestClass::$someStatic
        if($someStatic === null) $someStatic = 3; // initialize
        ++ $someStatic;
    }
}

$obj = new TestClass();
$obj->someFunc();

$TestClassSomeStatic = &PSM::vc('TestClass', 'someStatic');
echo $TestClassSomeStatic;
$TestClassSomeStatic = 7;
?>

이런 식으로 static member 변수를 흉내내는 class를 만들어 $GLOBALS나 Context 사용을 대체하는 것도 좋은 기법이 될 것 같습니다.