PHP Magic方法无法使用扩展类

I have a problem. As is shown I've made an abstract class with magic methods to be used in my classes. When i try to use the class Pratica (extension of StandardClass) and I try to acces to a simple property PHP returns this error: Trying to get property of non-object in /var/www/property/htdocs/pratiche/dettaglio_pratica.inc.php on line 40. The problem is that in my local server it works but in the company server does not. Is a configuration problem? or is a code problem? The company server uses PHP 5.3.3 and in locale I use PHP 5.3.6.

Anyone can help me? many thanks. Federico

Here is an extraction of the code:

    abstract class standardClass {

        protected $data = array();
        public function __construct() {

        }
        public function __set($property, $value) {

            $this->data[$property] = $value;

        }
        public function __get($property) {

            if (isset($this->data[$property]) === true && array_key_exists($property, $this->data)) {

                return $this->data[$property];

            }

        }
        public function __unset($property) {

            unset($this->data[$property]);

        }

        public function __isset($property) {

            return isset($this->data[$property]);
        }

    }

    class Pratica extends StandardClass {

        const _NOME_SESSIONE_PRATICA_   = "pratica";

        public function __construct($id_pratica) {

            $this->load($id_pratica);

        }
        public static function init($id_pratica = null) {

            Session::init();

            Session::sessionStart();    

            if (Session::existVar(self::_NOME_SESSIONE_PRATICA_) == true) {
                if (is_string(Session::getVar(self::_NOME_SESSIONE_PRATICA_)) == false) {
                    return new Pratica($id_pratica);
                }
                else {
                    return unserialize(Session::getVar(self::_NOME_SESSIONE_PRATICA_));
                }

            }

            return new Pratica($id_pratica);

        }

        private function load($id) {

            global $db;


            $sql = <<<EOQ
                    SELECT *
                      FROM elenco_pratiche
                     WHERE id = $id;
    EOQ;

            $result = $db->sql($sql);

            if ($db->righe() > 0) {
                $riga = $db->riga($result);

                $this->modify($riga);
            }
        }

        public function modify($pratica) {

            foreach ($pratica as $key => $value) {
                $this->data[$key] = $value;
            }
        }

        public function __destruct() {

            Session::addVar(self::_NOME_SESSIONE_PRATICA_, serialize($this));

        }
    }

class Session {

    protected $log;
    static public $is_started = false;

    static private $auto_start = false;

    static private $session_save_path = null;
    static private $session_id = null;
    static private $session_name = null;

    static private $cookie__lifetime = null;
    static private $cookie_path = null;
    static private $use_cookies = false;
    static private $use_only_cookies = false;
    static public function init() {

        if (ini_get("session.auto_start") == 1) {
            self::$auto_start = true;
            self::$is_started = true;
        }
        elseif (session_id() <> "") {
            self::$is_started = true;
        }

        self::$session_save_path = ini_get("session.save_path");

        if (ini_get("session.use_cookies") == 1) {
            self::$use_cookies = true;
        }

        if (ini_get("session.use_only_cookies") == 1) {
            self::$use_only_cookies = true;
        }


    }
    static public function isSessionAutostart() {

        return self::$auto_start;

    }
    static public function isStarted() {

        return self::$is_started;

    }
    static public function sessionStart() {

        if (self::$auto_start == false && self::$is_started == false) {

            session_start();

            self::$session_id = session_id();
            self::$session_name = session_name();
            self::$is_started = true;

        }

    }
    static public function setSessionId($id) {

            session_id($id);
            self::$session_id = session_id();

    }
    static public function getSessionId() {

            return(session_id());

    }
    static public function addVar ($name,$value) {

        if (self::$is_started == true) {
            $_SESSION[$name] = $value;
        }
    }
    static public function getVar ($name) {

        if (self::$is_started == true) {
            if (isset($_SESSION[$name]) == true) {
                return $_SESSION[$name];
            }
            else {
                return false;
            }

        }
    }
    static public function deleteVar($name) {

        if (isset($_SESSION[$name]) == true) {
            unset($_SESSION[$name]);
        }
    }

    static public function existVar($name) {

        $x = isset($_SESSION[$name]);

        return isset($_SESSION[$name]);

    }
    static public function dump($id = null) {

        $log = new log();

        if (is_null($id) == true) {
            foreach ($_SESSION as $key => $value) {
                $log->user(basename(__FILE__) . "_SESSION[" . $key . "] = " . $value,"federico");       
            }
        }
        else {
                $log->user(basename(__FILE__) . "_SESSION[" . $id . "] = " . $_SESSION[$id],"federico");        
        }

    }
    static public function closeSession() {

        if (self::$is_started == true) {

            session_unset();
            session_destroy();

            self::$is_started = false;

        }
    }
}

$pratica = Pratica::init($id);

$id_pratica = $pratica->id;