/** * Constructor * * Initialize application. Potentially initializes include_paths, PHP * settings, and bootstrap class. * * @param string$environment * @param string|array|Zend_Config $options String path to configuration file, or array/Zend_Config of configuration options * @throws Zend_Application_Exception When invalid options are provided * @return void */public function __construct($environment, $options = null){$this->_environment = (string) $environment;require_once "Zend/Loader/Autoloader.php";$this->_autoloader = Zend_Loader_Autoloader::getInstance();if (null !== $options) {if (is_string($options)) {$options = $this->_loadConfig($options);} elseif ($options instanceof Zend_Config) {$options = $options->toArray();} elseif (!is_array($options)) {throw new Zend_Application_Exception("Invalid options provided; must be location of config file, a config object, or an array");}$this->setOptions($options);}}Zend_Application配置方法| Option | Description |
|---|---|
| phpSettings | 用于配置php.ini选项,要求是数组,数组的键应该是选项的的key. |
| includePaths | 把附加的路径加入到include_path,要求是数组 |
| autoloaderNamespaces | 给Zend_Loader_Autoloader注册附加命名空间,为数组 |
| bootstrap | 可以是设置bootstrap引导类的路径的字符串,也可以是数组,数组元素要求为 "path" 和 "class" |
| Method | Return Value | Parameters | Description |
|---|---|---|---|
| __construct( $environment, $options = null) | Void |
| 构造函数。 用于初始化配置对象。 实例化Zend_Loader_Autoloader。 通过传递给构造函数选项然后传递给setOptions()方法。 |
| getEnvironment() | String | N/A | 获取环境配置 |
| getAutoloader() | Zend_Loader_Autoloader | N/A | 获取Zend_Loader_Autoloader实例 |
| setOptions(array $options) | Zend_Application |
| 所有选项都存储在引用内部,并多次调用该方法来合并选项。 会根据选项生产对于的setter方法。 例如,选项“phpSettings”对应setPhpSettings()。 (选项名称不区分大小写。) |
| getOptions() | Array | N/A | |
| hasOption($key) | Boolean |
| key不区分大小写。 |
| getOption($key) | Mixed |
| key不区分大小写。如果不存在返回 NULL |
| setPhpSettings(array $settings, $prefix = "") | Zend_Application |
| |
| setAutoloaderNamespaces(array $namespaces) | Zend_Application |
| |
| setBootstrap($path, $class = null) | Zend_Application |
| |
| getBootstrap() | NULL |Zend_Application_Bootstrap_Bootstrapper | N/A | 获取注册的bootstrap实例. |
| bootstrap() | Void | N/A | 调用 bootstrap的bootstrap() 引导应用. |
| run() | Void | N/A | 调用bootstrap的 run()运行应用 |
// Create application, bootstrap, and run$application = new Zend_Application(APPLICATION_ENV,APPLICATION_PATH . "/configs/application.ini");$application->bootstrap()->run();源代码
<?phpclass Zend_Application{/** * Constructor * * Initialize application. Potentially initializes include_paths, PHP * settings, and bootstrap class. * * @param string$environment * @param string|array|Zend_Config $options String path to configuration file, or array/Zend_Config of configuration options * @throws Zend_Application_Exception When invalid options are provided * @return void */public function __construct($environment, $options = null){$this->_environment = (string) $environment;require_once "Zend/Loader/Autoloader.php";$this->_autoloader = Zend_Loader_Autoloader::getInstance();if (null !== $options) {if (is_string($options)) {$options = $this->_loadConfig($options);} elseif ($options instanceof Zend_Config) {$options = $options->toArray();} elseif (!is_array($options)) {throw new Zend_Application_Exception("Invalid options provided; must be location of config file, a config object, or an array");}$this->setOptions($options);}}/** * Retrieve current environment * * @return string */public function getEnvironment(){return $this->_environment;}/** * Retrieve autoloader instance * * @return Zend_Loader_Autoloader */public function getAutoloader(){return $this->_autoloader;}/** * Set application options * * @param array $options * @throws Zend_Application_Exception When no bootstrap path is provided * @throws Zend_Application_Exception When invalid bootstrap information are provided * @return Zend_Application */public function setOptions(array $options){if (!empty($options["config"])) {if (is_array($options["config"])) {$_options = array();foreach ($options["config"] as $tmp) {$_options = $this->mergeOptions($_options, $this->_loadConfig($tmp));}$options = $this->mergeOptions($_options, $options);} else {$options = $this->mergeOptions($this->_loadConfig($options["config"]), $options);}}$this->_options = $options;$options = array_change_key_case($options, CASE_LOWER);$this->_optionKeys = array_keys($options);if (!empty($options["phpsettings"])) {$this->setPhpSettings($options["phpsettings"]);}if (!empty($options["includepaths"])) {$this->setIncludePaths($options["includepaths"]);}if (!empty($options["autoloadernamespaces"])) {$this->setAutoloaderNamespaces($options["autoloadernamespaces"]);}if (!empty($options["autoloaderzfpath"])) {$autoloader = $this->getAutoloader();if (method_exists($autoloader, "setZfPath")) {$zfPath= $options["autoloaderzfpath"];$zfVersion = !empty($options["autoloaderzfversion"])? $options["autoloaderzfversion"]: "latest";$autoloader->setZfPath($zfPath, $zfVersion);}}if (!empty($options["bootstrap"])) {$bootstrap = $options["bootstrap"];if (is_string($bootstrap)) {$this->setBootstrap($bootstrap);} elseif (is_array($bootstrap)) {if (empty($bootstrap["path"])) {throw new Zend_Application_Exception("No bootstrap path provided");}$path = $bootstrap["path"];$class = null;if (!empty($bootstrap["class"])) {$class = $bootstrap["class"];}$this->setBootstrap($path, $class);} else {throw new Zend_Application_Exception("Invalid bootstrap information provided");}}return $this;}/** * Retrieve application options (for caching) * * @return array */public function getOptions(){return $this->_options;}/** * Is an option present? * * @param string $key * @return bool */public function hasOption($key){return in_array(strtolower($key), $this->_optionKeys);}/** * Retrieve a single option * * @param string $key * @return mixed */public function getOption($key){}/** * Merge options recursively * * @param array $array1 * @param mixed $array2 * @return array */public function mergeOptions(array $array1, $array2 = null){if (is_array($array2)) {foreach ($array2 as $key => $val) {if (is_array($array2[$key])) {$array1[$key] = (array_key_exists($key, $array1) && is_array($array1[$key])) ? $this->mergeOptions($array1[$key], $array2[$key]) : $array2[$key];} else {$array1[$key] = $val;}}}return $array1;}/** * Set PHP configuration settings * * @param array $settings * @param string $prefix Key prefix to prepend to array values (used to map . separated INI values) * @return Zend_Application */public function setPhpSettings(array $settings, $prefix = ""){foreach ($settings as $key => $value) {$key = empty($prefix) ? $key : $prefix . $key;if (is_scalar($value)) {ini_set($key, $value);} elseif (is_array($value)) {$this->setPhpSettings($value, $key . ".");}}return $this;}/** * Set include path * * @param array $paths * @return Zend_Application */public function setIncludePaths(array $paths){$path = implode(PATH_SEPARATOR, $paths);set_include_path($path . PATH_SEPARATOR . get_include_path());return $this;}/** * Set autoloader namespaces * * @param array $namespaces * @return Zend_Application */public function setAutoloaderNamespaces(array $namespaces){$autoloader = $this->getAutoloader();foreach ($namespaces as $namespace) {$autoloader->registerNamespace($namespace);}return $this;}/** * Set bootstrap path/class * * @param string $path * @param string $class * @return Zend_Application */public function setBootstrap($path, $class = null){// setOptions() can potentially send a null value; specify default// hereif (null === $class) {$class = "Bootstrap";}if (!class_exists($class, false)) {require_once $path;if (!class_exists($class, false)) {throw new Zend_Application_Exception("Bootstrap class not found");}}$this->_bootstrap = new $class($this);if (!$this->_bootstrap instanceof Zend_Application_Bootstrap_Bootstrapper) {throw new Zend_Application_Exception("Bootstrap class does not implement Zend_Application_Bootstrap_Bootstrapper");}return $this;}/** * Get bootstrap object * * @return Zend_Application_Bootstrap_BootstrapAbstract */public function getBootstrap(){if (null === $this->_bootstrap) {$this->_bootstrap = new Zend_Application_Bootstrap_Bootstrap($this);}return $this->_bootstrap;}/** * Bootstrap application * * @param null|string|array $resource * @return Zend_Application */public function bootstrap($resource = null){$this->getBootstrap()->bootstrap($resource);return $this;}/** * Run the application * * @return void */public function run(){$this->getBootstrap()->run();}/** * Load configuration file of options * * @param string $file * @throws Zend_Application_Exception When invalid configuration file is provided * @return array */protected function _loadConfig($file){$environment = $this->getEnvironment();$suffix = pathinfo($file, PATHINFO_EXTENSION);$suffix = ($suffix === "dist") ? pathinfo(basename($file, ".$suffix"), PATHINFO_EXTENSION) : $suffix;switch (strtolower($suffix)) {case "ini":$config = new Zend_Config_Ini($file, $environment);break;case "xml":$config = new Zend_Config_Xml($file, $environment);break;case "json":$config = new Zend_Config_Json($file, $environment);break;case "yaml":case "yml":$config = new Zend_Config_Yaml($file, $environment);break;case "php":case "inc":$config = include $file;if (!is_array($config)) {throw new Zend_Application_Exception("Invalid configuration file provided; PHP file does not return array value");}return $config;break;default:throw new Zend_Application_Exception("Invalid configuration file provided; unknown config type");}return $config->toArray();}}更多关于zend相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》