频道直达 - 专题 - 新闻 - 基础 - 高级 - 安装 - 技巧 - 数据库 - 手册 - PHP - Linux - Java - MySQL - Apache - 麻辣堂 - 狼盟 - Rails社群 - 搜索 - 下载 - 开源 - 论坛
PHP开发资源网 主页>>高级应用>> 收藏此文 | 收藏本站 | 设为首页

深入理解symfony原理(4)

来源:www.phpres.com 作者:Angelover 出处:www.phpres.com 2007-8-12 11:05:51 进入讨论组
关 键 词: 原理 理解 深入 参数 symfony holder 方法 一个 echo

参数 holder Parameter Holders

很多symfony类都包含一个参数holder。参数holder用简便的方式封装了getter与setter方法。例如,sfResponse类包含了一个可以通过执行getParameterHolder()方法获得的参数holder。每一个参数holder都用同样的方式存取数据,如例2-15所示。

例 2-15 - 使用 sfResponse 参数holder
[php]
$response->getParameterHolder()->set('foo', 'bar');
echo $response->getParameterHolder()->get('foo');
=> 'bar'

大部分类通过使用参数holder的proxy方法来减少get/set操作的代码量。这是sfResponse对象的例子,例2-16可以达到例2-15同样效果。

Listing 2-16 - Using the sfResponse Parameter Holder Proxy Methods
[php]
$response->setParameter('foo', 'bar');
echo $response->getParameter('foo');
=> 'bar'

参数holder的getter方法可以有第二个参数作为默认值。这样在取值失败的时候比较简洁。见例2-17。

例 2-17 - 使用参数holder的get方法的默认值
[php]
// 'foobar' 参数没有定义, 所以getter返回空值
echo $response->getParameter('foobar');
=> null

// 利用条件判断给一个默认值
if ($response->hasParameter('foobar'))
{
  echo $response->getParameter('foobar');
}
else
{
  echo 'default';
}
=> default

// 但是使用第二个默认值参数快的多
echo $response->getParameter('foobar', 'default');
=> default

参数holder还支持命名空间。如果你给setter或者getter指定第三个参数,这个参数代表命名空间,那么这个参数就只会在这个命名空间里定义或者取值。见例2-18

例 2-18 - sfResponse 参数 Holder 的命名空间
[php]
$response->setParameter('foo', 'bar1');
$response->setParameter('foo', 'bar2', 'my/name/space');
echo $response->getParameter('foo');
=> 'bar1'
echo $response->getParameter('foo', null, 'my/name/space');
=> 'bar2'

当然,你可以给你自己的类增加参数holder来获得这些好处。例2-19告诉我们如何定一个有参数holder的类。

例 2-19 - 给类增加参数holder
[php]
class MyClass
{
  protected $parameter_holder = null;

  public function initialize ($parameters = array())
  {
    $this->parameter_holder = new sfParameterHolder();
    $this->parameter_holder->add($parameters);
  }

  public function getParameterHolder()
  {
    return $this->parameter_holder;
  }
}
常量 Constants

symfony里的常量少得出奇。这是因为PHP的一大缺点:常量定义后就不能改变了。所以symfony使用自己的配置对象,称作sfConfig,用来取代常量。它提供了在任何地方存取参数的静态方法。例2-20演示了sfConfig类的方法。

例 2-20 - 使用 sfConfig 类方法取代常量
[php]
// PHP常量
define('SF_FOO', 'bar');
echo SF_FOO;
// symfony 使用sfConfig对象
sfConfig::set('sf_foo', 'bar');
echo sfConfig::get('sf_foo');

sfConfig方法支持默认值,并且sfConfig::set()方法可以多次调用来设置同一个参数的值。第5章详细讨论了sfConfig方法。
类自动载入 Class Autoloading

一般来说,当你在PHP中要用一个类来创建一个对象的时候,你需要首先包含这个类的定义。
[php]
include 'classes/MyClass.php';
$myObject = new MyClass();

但是大的项目包含了很深的目录结构,包含所有这些文件还有路径很浪费时间。由于有__autoload()函数(或者spl_autoload_register()函数),symfony使得我们不需要写包含语句,你可以直接这么写:
[php]
$myObject = new MyClass();

symfony会在项目的lib目录里的所有php文件里寻找MyClass的定义。如果找到,就自动包含它。

所以你可以把所有的类放在lib目录,你再也不必包含他们。所以symfony项目通常没有include或者require语句。

NOTE 为了提高效率,第一次symfony自动在一个目录列表(在配置文件里面定义)里寻找。然后symfony把这些目录里的所有类和文件的关联存放在一个PHP数组里。这样,以后的自动载入就不需要扫描整个目录了。所以你每次在项目里面增加一个类都需要通过symfony clear-cache命令清空symfony缓存。缓存详见第12章,自动载入配置文件详见第19章。
总结

使用MVC框架迫使你按照框架的规定把代码分开。显示的代码归到视图里,数据处理的代码归到模型,请求处理逻辑归到控制器。这对MVC模式的应用程序很有用,也是一个约束。

symfony是一个PHP5写的MVC框架。它的结构充分发挥了MVC模式的好处,但也非常容易使用。这要感谢他的全面性与可配置性。

现在你已经了解了symfony背后的原理,差不多该是开发你的第一个应用程序的时候了。但是在这之前,你需要在你的开发服务器上安装一套symfony并跑起来。
<更多关于symfony资源请关注本站(PHP开发资源网http://bbs.phpre.com)更新>
欢迎进入PHP开发资源论坛讨论。
收藏此文】【 】【打印】【关闭
相关文章
图文推荐
论 坛 资 源
PHP开发资源网奋斗目标
阅读排行:
热门技术文档
最新图文档
本站编辑推荐:(本站开通Delphi4PHP专区,欢迎进入论坛交流!)
编缉最近更新文章
网站赞助商
搜索您感兴趣的内容
 
   网站首页 -  网站地图 -  网站合作 -  手册中心 -  通用网址 -  网站论坛 -  网站投稿 -  友情链接 -  帮助中心
版权所有:PHP开发资源网 © 2003-2008 通用网址:PHP资源网 合作媒体: 赛迪网IT技术
互联网违法和不良信息举报中心 | 不良信息举报信箱