基础设施
一些技术在symfony中会反复使用,你也会非常频繁的遭遇他们,这些技术包括参数仓库、常量以及自动加载类。
参数仓库
许多symfony类包括一个参数仓库,他是一种便捷的通过单纯的getter和setter方法封装属性的方式。例如,sfResponse类就有一个通过调用getParameterHolder()方法获取的参数仓库:
$response->getParameterHolder()->set('foo', 'bar'); echo $response->getParameterHolder()->get('foo'); => 'bar' |
很多类使用参数仓库提供代理方法来减少get/set操作的代码,上面的代码可以简化为:
$response->setParameter('foo', 'bar'); echo $response->getParameter('foo'); => 'bar' |
当然,你可以在自己的类中添加参数仓库来体验这种优势:
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; } } |
常量
你会发现,在symfony中只有少数的常量,这是因为PHP的问题:一旦一定义了常量你就无法更改他的值。所以symfony使用他自己的配置对象——sfConfig——来取代常量。他提供了静态方法使得在任何地方都可以访问参数:
//代替PHP常量, define('SF_FOO', 'bar'); echo SF_FOO; // Symfony 使用sfConfig对象 sfConfig::set('sf_foo', 'bar'); echo sfConfig::get('sf_foo'); |
sfConfig方法支持默认值,而且你可以对一个参数多次调用sfConfig::set()方法来更改他
自动加载类
通常地,当你使用一个类方法或者在PHP中创建一个对象,你需要首先包含类的定义
include 'classes/MyClass.php'; $myObject = new MyClass(); |
但在包含了大量类并且具有很深目录结构的大型项目中,要做到明了的类定义包含是很困难的。通过提供一个__autoload()方法(或者一个spl_autoload_register()方法),symfony使得包含语句不再必须,你可以直接写:
$myObject = new MyClass(); |