Autor | Zpráva | ||
---|---|---|---|
Musilda Profil |
#1 · Zasláno: 1. 10. 2013, 07:36:37
Zdravím,
mám dotaz k použití magických metod. Nejsem si jist, zda jsem to pochopil správně. Uvedu příklad z woocommerce, třída customer. Je definováno protected $_data;, a v constructu je pole: $this->_data = array( 'country' => esc_html( $country ), 'state' => '', 'postcode' => '', 'city' => '', 'address' => '', 'address_2' => '', 'shipping_country' => esc_html( $country ), 'shipping_state' => '', 'shipping_postcode' => '', 'shipping_city' => '', 'shipping_address' => '', 'shipping_address_2' => '', 'is_vat_exempt' => false, 'calculated_shipping' => false ); V dalších metodách, ale přistupuje k jednotlivým položkám pole pomocí $this->klíč: public function get_state() { if ( isset( $this->state ) ) return $this->state; } Dále třída obsahuje metody __isset, __get a __set: public function __isset( $property ) { return isset( $this->_data[ $property ] ); } public function __get( $property ) { return isset( $this->_data[ $property ] ) ? $this->_data[ $property ] : null; } public function __set( $property, $value ) { $this->_data[ $property ] = $value; $this->_changed = true; } Tuším, ale nevím, zda správně, že přistupuje do toho pole hodnot pomocí __get a __isset. Můžete mi prosím někdo vysvětlit princip? Díky za odpovědi. |
||
Tori Profil |
#2 · Zasláno: 1. 10. 2013, 08:06:04
Působí to na mě, že hlavním důvodem, proč to udělali takto (místo běžných vlastností třídy) je zřejmě řádek
$this->_changed = true; - asi se na konci zpracování požadavku automaticky updatují v DB data změněných objektů.
|
||
Musilda Profil |
#3 · Zasláno: 1. 10. 2013, 14:33:59
Ale mě jde spíše o to, že v get metodách, jako je třeba ta get_state neodkazuje na proměnnou $this->_data['state'], ale $this->state
|
||
han5vk Profil |
#4 · Zasláno: 1. 10. 2013, 15:12:30
Musilda:
No, pretože magická __get pri každom prístupe k premennej objektu vykoná kód ktorý v sebe má, teda v tomto prípade pri volaní $this->niečo si overí či to niečo v dátach má, ak áno, tak vráti premennú z poľa $this->_data[] . Čo je ti vlastne nejasné? |
||
Časová prodleva: 11 let
|
0