protected function magicGet($key)
    {
        if (!$this->magicInited) {
            $this->magicInit();
        }
        $fields = &$this->magicFields['fields'];
        if (!array_key_exists($key, $fields)) {
            if (isset($this->magicFields['loaders'][$key])) {
                $loader = $this->magicFields['loaders'][$key];
                if ((is_string($loader)) && (substr($loader, 0, 2) == '::')) {
                    $loader = substr($loader, 2);
                    $fields[$key] = $this->$loader($key);
                } else {
                    $fields[$key] = Callback::call($loader, [$key]);
                }
            } else {
                $fields[$key] = $this->magicCreateField($key);
            }
        }
        return $fields[$key];
    }