0
/**
    * getter method, basically same as offsetGet().
    *
    * This method can be called from an object of type Zend_Registry, or it
    * can be called statically.  In the latter case, it uses the default
    * static instance stored in the class.
    *
    * @param string $index - get the value associated with $index
    * @return mixed
    * @throws Zend_Exception if no entry is registerd for $index.
    */
public static function get($index)
    {
        $instance = self::getInstance();

        if (!$instance->offsetExists($index))
        {
            if ($instance->lazyLoad($index, $return))
            {
                return $return;
            }
            else
            {
                throw new Zend_Exception("No entry is registered for key '$index'");
            }
        }

        return $instance->offsetGet($index);
    }
...
public static function getDb()
    {
        return self::get('db');
    }

...

这是取自Xenforo/Application.php,虽然注释很清楚,但还是有一些疑问:

  1. $instance = self::getInstance();这条线在这里是什么意思?
  2. $instance->lazyLoad;找不到这个方法的声明:lazyLoad,也是Zend文件吗?
  3. $instance->offsetGet($index),我在SPL.php中看到了它的声明,是:
    public function offsetGet ($index) {},但是在{}里面是空的,那么这个函数是怎么实现的呢?
4

1 回答 1

0

这是关于您的三个问题的简要说明

1. $instance = self::getInstance(); 这条线在这里是什么意思?

答案 1. getInstance 方法用于获取该类实例,无需执行 $test = new class_name(); getInstance 方法是静态的,因此您无需声明 new class_name(); 即可获取该类实例;在 getInstance 方法中,它的检查是否设置了 _instance?如果未设置,则创建自己的类实例,然后返回该实例。

2. $instance->lazyLoad;找不到这个方法的声明:lazyLoad,也是Zend文件吗?

回答 2。您可以从下面的链接中了解延迟加载,以便您对延迟加载有更好的了解。关联

3. $instance->offsetGet($index),我在SPL.php中看到了它的声明,是:public function offsetGet($index){},但是{}里面是空的,那么这个函数是怎么实现的呢?

答案 3.这个方法可以从 Zend_Registry 类型的对象调用,也可以静态调用。在后一种情况下,它使用存储在类中的默认静态实例。

参数:字符串 $index - 获取与 $index 关联的值 返回:mixed 异常:如果没有为 $index 注册条目,则 Zend_Exception。

如果我能帮助你更多,请告诉我..

于 2013-04-18T05:28:38.330 回答