somemo programming etc.

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【php】マジックメソッド__setと__getと【symfony】

今回はphpのマジックメソッド(先頭に「__」が付いているメソッド)から、 setとgetについてのメモ。 二つのメソッドについては、下記URLを参照

http://www.php.net/manual/ja/language.oop5.overloading.php#language.oop5.overloading.members

オブジェクトに存在しない・アクセス権の無いメンバ変数にアクセスしたときに実行されるメソッドです。 気になった理由は、 symfonyのアクションでメンバ変数として存在しないものを定義すると VIEWで使用できるようになることを今更不思議に思ったからです。

定義すると、varHolder変数(sfComponet)に格納されるのはXdebug時に知りました。 では、どこで定義されるのか? これも、sfComponet内で定義された、「__set」によりvarHolderに格納できるようになっています。 「__get」により、取得できるようになっています。

 

いつVIEWで使えるようになるのか?簡単にメモ

index.php ⇒sfContextの生成

⇒sfContextの保持するControllerからDispatch

⇒Controller(sfWebController)からDispatch

⇒Controller(sfController)からforward

⇒sfFilterChainからexecute

⇒app/frontend/config/filters.ymlに記載されているFilterを実行する

# You can find more information about this file on the symfony website: # http://www.symfony-project.org/reference/1_4/en/12-Filters rendering: ~ security: ~ # insert your own filters here cache: ~ execution: ~

⇒上から順にFilterが実行され、sfExecutionFilterのexecuteでactionとViewが実行される

⇒handleViewにて、$actionInstance->getVarHolder()->getAll()を実行し、変数を渡している

このため、action内で定義されているメンバ変数は別の変数として定義してあげないとViewで使えません・・・ お勉強になります。以上。