рдкреАрдПрдЪрдкреА рдореЙрдбрд▓ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рджреНрд░рд╡ рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдПрд░рд┐рдпрд░рдЗрдВрдЯрд░реЗрдЯрд░

рдпрд╣ рд╡рд┐рдзрд┐ рдореВрд▓ рд╣реЛрдиреЗ рдХрд╛ рдвреЛрдВрдЧ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди, рдпрд╣ рдореБрдЭреЗ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реИрд░рд┐рдПрди_рдСрдмреНрдЬреЗрдХреНрдЯ , Magento рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд┐рдд, рд╡рд┐рдЪрд╛рд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╡рд╣рд╛рдВ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрд╛рд░реА рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рд╕реА рди рдХрд┐рд╕реА рддрд░рд╣ рдХреЛрдб рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдПрдХ рдХрд╛рдлреА рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдХрд╛рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореИрдВ рдФрд░ рдЕрдзрд┐рдХ рдХрд╣реВрдВрдЧрд╛: рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ, рд╕рднреА рдХреЛрдб рдХреЗ рд▓рдЧрднрдЧ рддреАрди рдЪреМрдерд╛рдИ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рд▓реЛрдб рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВ, рд╕рд╣реЗрдЬ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рд╣рдЯрд╛ рд░рд╣реЗ рд╣реИрдВред рдЪрд╛рд╣реЗ рд╡рд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдВрдЬреАрдХрд░рдг рд╣реЛ, рдПрдХ рджрд░реНрдЬрди рд╣рд╛рд▓ рдХреЗ рд▓реЗрдЦреЛрдВ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдпрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо - рдпрд╣ рд╕рдм рдмреБрдирд┐рдпрд╛рджреА рдореЙрдбрд▓ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд╛рде рдЫреЛрдЯрд╛ рдХрд╛рдо рд╣реИред рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд▓рд┐рдЦрд╛ рдФрд░ рдкрдврд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд╕рд┐рд░ рдХреЛ рдирд╣реАрдВ рджрдмрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рдЙрд╕реЗ (рдкреНрд░реЛрдЧреНрд░рд╛рдорд░) рдХреЛ рдЖрд╡реЗрджрди рдХреЗ рддрд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЕрдЧрд▓реЗ рдЕрджреНрдпрддрди рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдЧреНрд░рджреВрдд


рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ (рдмреЗрд╢рдХ, рдХреЛрдбрд┐рдВрдЧ рдорд╛рдирдХреЛрдВ рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рд╕рдордЭ рдХреЗ рдЕрд▓рд╛рд╡рд╛) рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рднрд╛рд╖рд╛ рдХреЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрд░реАрдм рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдЙрддреНрдкрд╛рдж рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдирд╛рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ, рдРрд╕реА рдХреАрдордд рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ, рдЗрд╕реЗ рд╕рд╣реЗрдЬреЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдХреЛрдб рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ рдмрдЪрдирд╛ рд╕рдВрднрд╡ рд╣реИ, рддреЛ рдпрд╣ рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдпрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЪрд░ рдХрд╛ рдирд╛рдо (рдЬрдм рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛) рд╣реЛ, рддреЛ рдЗрд╕реЗ рдЯрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рджреНрд░рд╡ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдиреЗ рдореБрдЭреЗ рдЪрд░ рдирд╛рдо рдХреА рд▓рдЧрд╛рддрд╛рд░ рдердХрд╛рдК рдирдХрд▓ рд╕реЗ рдмрдЪрд╛рдпрд╛ред

рджреНрд░рд╡рд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕


рдХрдЯрд▓реЗрдЯ рд╕реЗ рдордХреНрдЦрд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдФрд░ "рджреНрд░рд╡ рдЗрдВрдЯрд░рдлрд╝реЗрд╕" рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдореЗрдВ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛, рдпрджрд┐ рдЗрд╕реЗ рди рдХреЗрд╡рд▓ рдореЙрдбрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
abstract class Core_Fluent extends ArrayObject {} 


рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдореИрдВ рдЕрдВрддрд┐рдо рдХреЛрдб рдХреИрд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛:
 $instance->load($entity_id) ->setName('Foo') ->setDescription('Bar') ->setBasePrice(250) ->save(); 

рдЙрд╕реА рд╕рдордп, рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ "рдирд╛рдо", "рд╡рд┐рд╡рд░рдг", "base_price" рдХреА рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдП (рдЗрд╕рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдпрд╣ рдореЗрд░реЗ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдорд╛рдирдХ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛)ред

рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбрд▓ рдореЗрдВ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдирд╣реАрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдХреЛ "рдЬрд╛рджреВ рдХреЗ рддрд░реАрдХреЛрдВ" ( рдЬрд╛рджреВ рдХреЗ рддрд░реАрдХреЛрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, __call () рд╡рд┐рдзрд┐ред рдЖрдк __get () рдФрд░ __set () рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ ArrayIterator рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдЪрд▓рд╛ рдЧрдпрд╛ред

рддреЛ, __call рддрд░реАрдХрд╛, рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ:
 ... //     CamelCase  __ //      StackOverflow,       const PREG_CAMEL_CASE = '/(?<=[AZ])(?=[AZ][az])|(?<=[^AZ])(?=[AZ])|(?<=[A-Za-z])(?=[^A-Za-z])/'; //      protected $_data = array(); public function __call($method_name, array $arguments = array()) { //   ,    ,      //        (setBasePrice    set  BasePrice) if(!preg_match('/^(get|set|isset|unset)([A-Za-z0-9]+)$/', $method_name, $data)) { //    ,    throw new Core_Exception('Method '.get_called_class().'::'.$method_name.' was not found'); } //        (BasePrice => base_price)    $property $property = strtolower(preg_replace(self::PREG_CAMEL_CASE, '_$0', $data[2])); //   ,      switch($data[1]) { case 'get': { // $object->getBasePrice():    return $this->get($property); } break; case 'set': { // $object->setBasePrice():    return $this->set($property, $arguments[0]); } break; case 'unset': { // $object->getBasePrice():     return $this->_unset($property); } break; case 'isset': { // $object->getBasePrice(): ,       return $this->_isset($property); } break; default: { } } // ,    ,   ,    " " return $this; } ... 


рдЬрд╛рдУ , рд╕реЗрдЯ , _isset, рдФрд░ _unset рддрд░реАрдХреЗ


рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЙрдирдХрд╛ рдкреНрд░рднрд╛рд╡ рдирд╛рдо рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ:
 ... public function get($code) { if($this->_isset($code)) { return $this->_data[$code]; } //     ,      NULL return NULL; } public function set($code, $value) { $this->_data[$code] = $value; return $this; } public function _unset($code) { unset($this->_data[$code]); return $this; } public function _isset($code) { return isset($this->_data[$code]); } ... 


ArrayIterator


рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╕рд╛рд╣рдЪрд░реНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ (рдФрд░ рди рдХреЗрд╡рд▓, рдмрд▓реНрдХрд┐ рдпрд╣ рдПрдХ рдФрд░ рдХрд╣рд╛рдиреА рд╣реИ) рд╕рд░рдгреА: рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ ArrayIterator рд╣реИред рдмреЗрд╢рдХ, рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдирд╛рдо рджреЗрдирд╛ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЖрдкрдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рди рдХрд░рдирд╛ рдкрдбрд╝реЗ, рд▓реЗрдХрд┐рди, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдкрд┐рдЫрдбрд╝реА рд╕рдВрдЧрддрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдерд╛ рдЬреЛ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рдерд╛ рдФрд░ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдереЗ, рд▓реЗрдХрд┐рди рджреВрд╕рд░рд╛, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдПрдХ рдмрд╛рдд ArrayIterator рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдПрдХ рджреНрд░рд╡ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред

 ... public function offsetExists($offset) { return $this->_isset($offset); } public function offsetUnset($offset) { return $this->_unset($offset); } public function offsetGet($offset) { return $this->get($offset); } public function offsetSet($offset, $value) { return $this->set($offset, $value); } public function getIterator() { return new Core_Fluent_Iterator($this->_data); } ... 

рдФрд░, рддрджрдиреБрд╕рд╛рд░, Core_Fluent_Iterator рд╡рд░реНрдЧ:
 class Core_Fluent_Iterator extends ArrayIterator {} 


рд╡рд╣ рд╕рдм рд╣реИред рдЕрдм Core_Fluent рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝рддреЛрдбрд╝ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:
 class Some_Class extends Core_Fluent {} $instance = new Some_Class(); $instance->set('name', 'Foo')->setDescription('Bar')->setBasePrice(32.95); echo $instance->getDescription(), PHP_EOL; // Bar echo $instance['base_price'], PHP_EOL; // 32.95 echo $instance->get('name'), PHP_EOL; // Foo // name => Foo // description => Bar // base_price => 32.95 foreach($instance as $key => $value) { echo $key, ' => ', $value, PHP_EOL; } var_dump($instance->issetBasePrice()); // true var_dump($instance->issetFinalPrice()); // false var_dump($instance->unsetBasePrice()->issetBasePrice()); // false 


рдЖрджрд░реНрд╢


рдЕрдм рдореЙрдбрд▓ рдЦреБрдж, рдЙрдкрд░реЛрдХреНрдд рддрдВрддреНрд░ рдХреЗ рдЖрд╡реЗрджрди рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ред
 abstract class Core_Model_Abstract extends Core_Fluent {} 


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ CRUD (рдмрдирд╛рдиреЗ, рд▓реЛрдб рдХрд░рдиреЗ, рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ) рдХреЗ рд▓рд┐рдП рдиреАрдВрд╡ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддрд░реНрдХ (рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛, рдлрд╛рдЗрд▓реЗрдВ рдФрд░ рдХреБрдЫ рднреА) рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдХрдо рд╣реЛрдЧрд╛, рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 ... //   ,    protected $_changed_properties = array(); // .   save()        //      ,     //     (   ) public function create() { return $this; } //  public function load($id) { $this->_changed_properties = array(); return $this; } //    public function loadFromArray(array $array = array()) { $this->_data = $array; return $this; } //  public function save() { $this->_changed_properties = array(); return $this; } //  public function remove() { return $this->unload(); } //    public function unload() { $this->_changed_properties = array(); $this->_data = array(); return $this; } //     public function toArray() { return $this->_data; } ... 

рдЕрдВрдд рдореЗрдВ, рдУрд╡рд░рд░рд╛рдЗрдб рд╕реЗрдЯ () рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЧреБрдгреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдЬреЛрдбрд╝рдХрд░
 ... public function set($code, $value) { $this->_changed_properties[] = $code; return parent::set($code, $value); } ... 

рдЕрдм рдЗрд╕ рд╡рд░реНрдЧ рд╕реЗ рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдПрдбрд╛рдкреНрдЯрд░реЛрдВ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕, рдлрд╛рдЗрд▓реЛрдВ рдпрд╛ рдПрдкреАрдЖрдИ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдВрддрд┐рдо рдбреЗрдЯрд╛ рдореЙрдбрд▓ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВред

рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рддрд╣рдд рд╕рднреА рддреАрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдкреВрд░реНрдг рдХреЛрдбред
рддреАрдиреЛрдВ рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдкреВрд░рд╛ рдХреЛрдб
рдХреЛрд░ / рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ред рдПрдлрдкреА
 <?php abstract class Core_Fluent extends ArrayObject { const PREG_CAMEL_CASE = '/(?<=[AZ])(?=[AZ][az])|(?<=[^AZ])(?=[AZ])|(?<=[A-Za-z])(?=[^A-Za-z])/'; protected $_data = array(); public function __call($method_name, array $arguments = array()) { if(!preg_match('/^(get|set|isset|unset)([A-Za-z0-9]+)$/', $method_name, $data)) { throw new Core_Exception('Method '.get_called_class().'::'.$method_name.' was not found'); } $property = strtolower(preg_replace(self::PREG_CAMEL_CASE, '_$0', $data[2])); switch($data[1]) { case 'get': { return $this->get($property); } break; case 'set': { return $this->set($property, $arguments[0]); } break; case 'unset': { return $this->_unset($property); } break; case 'isset': { return $this->_isset($property); } break; default: { } } return $this; } public function get($code) { if($this->_isset($code)) { return $this->_data[$code]; } return NULL; } public function set($code, $value) { $this->_data[$code] = $value; return $this; } public function _unset($code) { unset($this->_data[$code]); return $this; } public function _isset($code) { return isset($this->_data[$code]); } /** * Implementation of ArrayIterator */ public function offsetExists($offset) { return $this->_isset($offset); } public function offsetUnset($offset) { return $this->_unset($offset); } public function offsetGet($offset) { return $this->get($offset); } public function offsetSet($offset, $value) { return $this->set($offset, $value); } public function getIterator() { return new Core_Fluent_Iterator($this->_data); } } ?> 


рдХреЛрд░ / рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ / Iterator.php
 <?php class Core_Fluent_Iterator extends ArrayIterator {} ?> 


рдХреЛрд░ / рдореЙрдбрд▓ / Abstract.php
 <?php abstract class Core_Model_Abstract extends Core_Fluent { protected $_changed_properties = array(); public function set($code, $value) { $this->_changed_properties[] = $code; return parent::set($code, $value); } public function create() { return $this; } public function load($id) { $this->_changed_properties = array(); return $this; } public function loadFromArray(array $array = array()) { $this->_data = $array; return $this; } public function save() { $this->_changed_properties = array(); return $this; } public function remove() { return $this->unload(); } public function unload() { $this->_changed_properties = array(); $this->_data = array(); return $this; } public function toArray() { return $this->_data; } } ?> 



рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп


рдпрд╣ рдХрд╛рдлреА рд╕реНрд╡реЗрдЪреНрдЫрд╛ рд╕реЗ рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХреЛрдб рдХреЗ рдХрд╛рд░рдгред рдпрджрд┐ рдпрд╣ рд╡рд┐рд╖рдп рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рд╣реА рддрдВрддреНрд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣ (рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдФрд░ рд╕рд╛рдореВрд╣рд┐рдХ (рдмреИрдЪ) рдХреНрд░рд┐рдпрд╛рдУрдВ) рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ)ред рджреЛрдиреЛрдВ рд╕рдВрдЧреНрд░рд╣ рдФрд░ рдЗрди рдореЙрдбрд▓реЛрдВ рдХреЛ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЧрдП рдврд╛рдВрдЪреЗ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЬрдЯрд┐рд▓ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рдХрд╛рд╢рд┐рдд рд▓реЗрдЦ рдХреЛ рдЕрдзрд┐рднрд╛рд░ рдирд╣реАрдВ рдбрд╛рд▓рд╛ред
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдЖрдкрдХреА рд░рд╛рдп рдпрд╛ рддрд░реНрдХрдкреВрд░реНрдг рдЖрд▓реЛрдЪрдирд╛ рд╕реБрдирдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

Source: https://habr.com/ru/post/In185896/


All Articles