Ethna2.3.5とEthna2.6betaを比較する (その3)
$ diff ETHNA_2_3_5kai/class/ActionClass.php Ethna-2.6.2011010402/class/ActionClass.php -uEbwB
--- ETHNA_2_3_5kai/class/ActionClass.php 2011-05-07 22:10:00.000000000 +0900
+++ Ethna-2.6.2011010402/class/ActionClass.php 2010-12-27 03:32:46.000000000 +0900
@@ -1,12 +1,12 @@
* @license http://www.opensource.org/licenses/bsd-license.php The BSD License
* @package Ethna
- * @version $Id$
+ * @version $Id: fe3fef6769eb39580c681736db08e0f2cbbbed01 $
*/
// {{{ Ethna_ActionClass
@@ -23,32 +23,38 @@
* @access private
*/
- /** @var object Ethna_Backend backendオブジェクト */
- var $backend;
+ /** @protected object Ethna_Backend backendオブジェクト */
+ protected $backend;
- /** @var object Ethna_Config 設定オブジェクト */
- var $config;
+ /** @protected object Ethna_Config 設定オブジェクト */
+ protected $config;
- /** @var object Ethna_I18N i18nオブジェクト */
- var $i18n;
+ /** @protected object Ethna_I18N i18nオブジェクト */
+ protected $i18n;
- /** @var object Ethna_ActionError アクションエラーオブジェクト */
- var $action_error;
+ /** @protected object Ethna_ActionError アクションエラーオブジェクト */
+ protected $action_error;
- /** @var object Ethna_ActionError アクションエラーオブジェクト(省略形) */
- var $ae;
+ /** @protected object Ethna_ActionError アクションエラーオブジェクト(省略形) */
+ protected $ae;
- /** @var object Ethna_ActionForm アクションフォームオブジェクト */
- var $action_form;
+ /** @protected object Ethna_ActionForm アクションフォームオブジェクト */
+ protected $action_form;
- /** @var object Ethna_ActionForm アクションフォームオブジェクト(省略形) */
- var $af;
+ /** @protected object Ethna_ActionForm アクションフォームオブジェクト(省略形) */
+ protected $af;
- /** @var object Ethna_Session セッションオブジェクト */
- var $session;
+ /** @protected object Ethna_Session セッションオブジェクト */
+ protected $session;
- /** @var object Ethna_Plugin プラグインオブジェクト */
- var $plugin;
+ /** @public object Ethna_Plugin プラグインオブジェクト */
+ public $plugin;
+
+ /** @protected object Ethna_Logger ログオブジェクト */
+ protected $logger;
+
+ /** @protected array Preload plugins definition */
+ protected $plugins = array();
/**#@-*/
@@ -58,21 +64,24 @@
* @access public
* @param object Ethna_Backend $backend backendオブジェクト
*/
- function Ethna_ActionClass(&$backend)
+ public function __construct($backend)
{
- $c =& $backend->getController();
- $this->backend =& $backend;
- $this->config =& $this->backend->getConfig();
- $this->i18n =& $this->backend->getI18N();
-
- $this->action_error =& $this->backend->getActionError();
- $this->ae =& $this->action_error;
-
- $this->action_form =& $this->backend->getActionForm();
- $this->af =& $this->action_form;
+ $c = $backend->getController();
+ $this->backend = $backend;
+ $this->config = $this->backend->getConfig();
+ $this->i18n = $this->backend->getI18N();
+
+ $this->action_error = $this->backend->getActionError();
+ $this->ae = $this->action_error;
+
+ $this->action_form = $this->backend->getActionForm();
+ $this->af = $this->action_form;
+
+ $this->session = $this->backend->getSession();
+ $this->plugin = $this->backend->getPlugin();
+ $this->logger = $this->backend->getLogger();
- $this->session =& $this->backend->getSession();
- $this->plugin =& $this->backend->getPlugin();
+ $this->preloadPlugin();
}
/**
@@ -81,7 +90,7 @@
* @access public
* @return string 遷移名(nullなら正常終了, falseなら処理終了)
*/
- function authenticate()
+ public function authenticate()
{
return null;
}
@@ -92,7 +101,7 @@
* @access public
* @return string 遷移名(nullなら正常終了, falseなら処理終了)
*/
- function prepare()
+ public function prepare()
{
return null;
}
@@ -103,10 +112,31 @@
* @access public
* @return string 遷移名(nullなら遷移は行わない)
*/
- function perform()
+ public function perform()
{
return null;
}
+
+ /**
+ * get plugin object
+ *
+ * @access protected
+ */
+ protected function preloadPlugin()
+ {
+ foreach ($this->plugins as $alias => $plugin) {
+ $plugin_alias = $alias;
+ if (is_int($alias)) {
+ $plugin_alias = $plugin;
+ }
+
+ $plugin_name = explode('_', $plugin);
+ if (count($plugin_name) === 1) {
+ $plugin_alias[] = null;
+ }
+
+ $this->plugin->setPlugin($plugin_alias, $plugin_name);
+ }
+ }
}
// }}}
-?>
分析する
ざっくり見てみると、1.コンストラクタが __construct になった
2.プロパティが var → protected になった
3.authenticate, prepare, perform に public がついた
4.preloadPluginメソッドが増えた
1.コンストラクタが __construct に
下方互換性はどうなんだろ?派生クラス側で、parent::Ethna_ActionClassとやっていると問題が起こるかもしれない。(後で調べます)
【追記】
やはり、互換性に問題がある。派生クラス側をparent::__construct に修正する必要がある。
2.プロパティが var → protected になった
これは大きい。シンタックス的にはpublicからprotectedへ変わったことになる。
他のクラスから$actionClass->af などとしている場合に文法エラーになってしまう。
差分のアップグレードは慎重にやらないといけない。
(もちろん、@protected というdocblockの指示をちゃんと守っていれば問題ないのだけど、そんな紳士協定はあてにできないので)
3.authenticate, prepare, perform に public がついた
これは、シンタックス的にはpublicあってもなくても同じなので問題ない。4.preloadPluginメソッドが増えた
よくわからないので後回し。総論
2の変化が最も影響が大きいと思われる。ここは当分var(またはpublic)のままにしておいた方がよさそうだ。