ZendFramework学习第三章(核心组件—对象注册表)

来源:互联网 发布:淘宝网宴会包 编辑:程序博客网 时间:2024/05/17 03:43

对象注册表是ZF框架中可以作为值与对象存储容器的特殊类。将值或者对象存储在对象注册表中就可以在程序中随时随地调用,可以把对象注册表简单的理解为一种特殊的全局变量哦亲。

创建对象注册表

    要创建对象对象注册表首先要创建一个Registry对象。可以通过两种方法来实现创建对象注册表并对其进行访问。一种是使用传统的new关键字来问类实例化一个对象;一种是使用类的set()方法,大家看到这应该早有反映,对于ZF呢无非就是加载类啊,创建对象啊,在要不就是使用类里边的方法啦。无非就是面向对象这些东西。

 

Registry实例化一个对象

    前边说道实例化对象有两种,我们先说这个普通的,也就是与使用普通类与对象一样,对象建立之后,就可以使用对象的属性和方法。在为Zend_Registry实例化对象的时候需指定键与值,其语法如下:

$registry = new Zend_Registry(array('index'=>$value));

    其中参数array这个数组作为一个键/值对数组(数组的元素对应键,每个元素的值就是每个键对应的值),返回值$regsitry就是一个对象注册表实例。这种方法为类实例化对象也就是建立对象注册表之后,可以使用调用数组的形式来调用对象注册表。

举个里子

           $member = array(                       //定义数组

                         "姓名"=>"张三",

                         "性别"=>"",

                         "爱好"=>"玩地下城"

                         );                    

           $registry=new Zend_Registry($member);   //实例化对象注册表,将数组存储与其中

           echo "<br>";

           echo "<br>";

           echo "<br>";

           echo $registry["姓名"];                //以数组形式访问对象注册表 

           echo "<br>";

           echo $registry["性别"];

           echo "<br>";

           echo $registry["爱好"];

 

使用set()方法为对象注册表设置值

    上边提到,除了使用传统new关键字创建对象注册表之外,我们可以通过Zend_$Registry类的静态方法set()为对象注册表设置。方法如下:

Zend_Resgistry::set('index','value')

    index呢表示键或者是索引也可以,而value呢表示该键所对应的值。value可以为对象、数组或标量。对象注册表的值再设置过之后可以使用set()方法为键设置新值,新值会覆盖原值。使用set()方法为对象设置内容时要注意使用这种方法设置的值需要通过get()方法来获取内容。真心的,大家记住这句话,不清楚的不妨自己试一试,假如我们把上边的例子改为:

          $member = array(                       //定义数组

                         "姓名"=>"张三",

                         "性别"=>"asdfsdf",

                         "爱好"=>"玩地下城"

                         );                    

           $registry=new Zend_Registry($member);   //实例化对象注册表,将数组存储与其中

           echo "<br>";

          

           Zend_Registry::set(registry,$member);

           print_r(Zend_Registry::get("registry"));

          

           echo "<br>";

           echo "<br>";

           echo $registry["姓名"];                //以数组形式访问对象注册表 

           echo "<br>";

           echo $registry["性别"];

           echo "<br>";

           echo $registry["爱好"];

 

 

使用new方式定义的不用get()方法获取就可以得到值,而如果使用set修改的值必须使用get来获取之后输出

 

 

 

 

用对象的访问方式

    名字叫对象注册表当然也可以用对象的方式访问对象注册表楼。在对象注册表创建之后,可以通过方法setInstance()将其转化为静态对象,这样就可以以对象的方式对其进行访问。方法如下:

Zend_Registry::setInstance($registry)

其中$registry为一个注册好的对象注册表实例,该方法呢把指定的对象注册表设置为静态对象。设置为静态对象之后,可以使用getInstance()方法来返回此静态对象。该方法的语法格式如下:

Zend_Registry::getInstance()

    该方法没有任何参数,调用该方法将返回对象注册表的静态对象。两个方法(setInstancegetInstance)配合使用就可以实现对象方式访问对象注册表了,和get/set这个方法类似。举个例子哦:

 

           // 对象方式访问对象注册表

          

           $registry=new Zend_Registry();

           Zend_Registry::setInstance($registry);

          

           $registry->name="milk";

           $registry->age="30";

           $reg=Zend_Registry::getInstance();

           echo "<br>";

           echo "<br>";

           echo $reg->name;

           echo "<br>";

           echo $reg->age;

查询索引的值是否存在

    存在的话索引原始值会被新值覆盖,这有不够意思昂。Registry提供了静态方法isREgistered()来实现对索引是否有值进行判断,返回值为布尔型。方法如下:

Zend_Registry::isRegisterd($index)

    这个啦么简单就不用我举例了吧,用个if语句判断下比如:

Zend_Registry::set("name","张八");

 

if(Zend_Registry::isRegistrered("name")){

echo "name已经定义";

 

}else{

echo "name没定义";

 

}

 

删除静态注册表

不墨迹,方法:

zend_Registry::_unsetInstance()

    不过学到最后呢我有些疑问,就是关于删除静态注册表、查询注册表是否存在或查询注册表键值内是否有值他们的参数都是写什么,举个例子看下:

 

第一种:

           /* $registry=new Zend_Registry();

           Zend_Registry::setInstance($registry);

          

           $registry->name="milk";

           $registry->age="30";

           $reg=Zend_Registry::getInstance();

           echo "<br>";

           echo "<br>";

           echo $reg->name;

           echo "<br>";

           echo $reg->age;

           Zend_Registry::_unsetInstance("name");

           if (Zend_Registry::isRegistered("name")){

                 

                  echo "name";

           }else {

                  echo "name没有";

                 

           }

       if (Zend_Registry::isRegistered("age")){

                 

                  echo "age";

           }else {

                  echo "age没有";

                 

           }

*/

 第二种:    

           $registry=new Zend_Registry();

           Zend_Registry::setInstance($registry);

            

           $registry->name="milk";

           $registry->age="30";

           $reg=Zend_Registry::getInstance();

           echo "<br>";

           echo "<br>";

           echo $reg->name;

           echo "<br>";

           echo $reg->age;

     Zend_Registry::_unsetInstance($registry);

           if (Zend_Registry::isRegistered($registry)){

          

                  echo "name";

           }else {

                  echo "name没有";

          

           }

       if (Zend_Registry::isRegistered($registry)){

          

                  echo "age";

           }else {

                  echo "age没有";

          

           }

    就说删除而言可以是键也可以是对象注册表实例,如果删除的是实例里边的键值都没了。如果是实例当中的某个键值的话,你会惊奇的发现整个实例也会没有,反正我试过了。也就是说第一种写法将name删除的话age也会没有。不信自己可以试一下哦亲!

书上说使用时要注意两个问题,注意哦:第一呢就是使用前判断索引是否存在,第二那就是删除静态注册表前要确认已经不需要了。

 

 

 

Sometimes you just have to hold your head up high, try not to cry, and say goodbye!有时候,你要做的就是,昂起自己的头,不让眼泪掉下来,然后潇洒的说一声:再见…….

原创粉丝点击