Base::ref PHP Method

ref() public method

Get hive key reference/contents; Add non-existent hive keys, array elements, and object properties by default
public ref ( $key, $add = TRUE, &$var = NULL ) : mixed
$key string
$add bool
$var mixed
return mixed
    function &ref($key, $add = TRUE, &$var = NULL)
    {
        $null = NULL;
        $parts = $this->cut($key);
        if ($parts[0] == 'SESSION') {
            if (!headers_sent() && session_status() != PHP_SESSION_ACTIVE) {
                session_start();
            }
            $this->sync('SESSION');
        } elseif (!preg_match('/^\\w+$/', $parts[0])) {
            user_error(sprintf(self::E_Hive, $this->stringify($key)), E_USER_ERROR);
        }
        if (is_null($var)) {
            if ($add) {
                $var =& $this->hive;
            } else {
                $var = $this->hive;
            }
        }
        $obj = FALSE;
        foreach ($parts as $part) {
            if ($part == '->') {
                $obj = TRUE;
            } elseif ($obj) {
                $obj = FALSE;
                if (!is_object($var)) {
                    $var = new stdclass();
                }
                if ($add || property_exists($var, $part)) {
                    $var =& $var->{$part};
                } else {
                    $var =& $null;
                    break;
                }
            } else {
                if (!is_array($var)) {
                    $var = [];
                }
                if ($add || array_key_exists($part, $var)) {
                    $var =& $var[$part];
                } else {
                    $var =& $null;
                    break;
                }
            }
        }
        return $var;
    }

Usage Example

コード例 #1
0
ファイル: multilang.php プロジェクト: sheck87/f3-multilang
 protected function rewrite()
 {
     $routes = array();
     $aliases =& $this->f3->ref('ALIASES');
     $redirects = array();
     foreach ($this->f3->get('ROUTES') as $old => $data) {
         $route = current(current($data));
         //let's pick up any route just to get the URL name
         $name = @$route[3];
         //PHP 5.3 compatibility
         $new = $old;
         if (!($name && in_array($name, $this->global_aliases) || isset($this->global_regex) && preg_match($this->global_regex, $old))) {
             if (isset($this->rules[$this->current][$name])) {
                 $new = $this->rules[$this->current][$name];
                 if ($new === FALSE) {
                     if (isset($aliases[$name])) {
                         unset($aliases[$name]);
                     }
                     continue;
                 }
             }
             $new = rtrim('/' . $this->current . $new, '/');
             if ($this->migrate && $this->auto) {
                 $redir = $old;
                 if (isset($this->rules[$this->primary][$name])) {
                     $redir = $this->rules[$this->primary][$name];
                 }
                 if ($redir !== FALSE) {
                     $redirects[$old] = rtrim('/' . $this->primary . $redir, '/');
                 }
             }
         }
         if (isset($routes[$new])) {
             user_error(sprintf(self::E_Duplicate, $new), E_USER_ERROR);
         }
         $routes[$new] = $data;
         if (isset($aliases[$name])) {
             $aliases[$name] = $new;
         }
     }
     $this->f3->set('ROUTES', $routes);
     foreach ($redirects as $old => $new) {
         $this->f3->route('GET ' . $old, function ($f3) use($new) {
             $f3->reroute($new, TRUE);
         });
     }
 }
All Usage Examples Of Base::ref