
рд▓реЗрдЦ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реЛрдХрд░
рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ PHP рдореЗрдВ рдХрд░реА рдФрд░ рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ , рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдЖ, рдЕрд░реНрдерд╛рддреН рдПрдХ рд╡рд┐рдзрд┐, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВред
рдкреНрд░рд╛рдердорд┐рдХ рдЕрдерд╡рд╛ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рд▓рдХреНрд╖рдг
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдХрд░реА рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рддрд░реНрдХреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕рдордп рдореЗрдВ рдЕрдкрдиреЗ рддрд░реНрдХреЛрдВ рдХреЛ рд▓реЗрддрд╛ рд╣реИред рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдПрдоред рд╢реЗрдЗрдирдлрд┐рдВрдХрд▓ рдФрд░ рдЬреАред рдлреНрд░реЗрдЬ рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдПрдЪред рдХрд░реА рдХреЗ рд╕рдореНрдорд╛рди рдореЗрдВ рдЗрд╕рдХрд╛ рдирд╛рдо рдорд┐рд▓рд╛ред рдЖрдЗрдП рдЕрдм рдЗрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд╡рд┐рдзрд┐ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди 2 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдмрдбрд╝реА рдХреНрд╖рдорддрд╛ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬрдм рддрд░реАрдХреЛрдВ рдХреЛ рд░рди-рдЯрд╛рдЗрдо рдкрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рдзрд┐ рдХреЗ рд╢рд░реАрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдП рдмрд┐рдирд╛ред
рд╕реНрд░реЛрдд рдХреЛрдб
рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдБ рдпрд╣
рдПрдХ рдХрд░реА рдкрджреНрдзрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ
рд╡рд░реНрдЧ рд╣реИ , рдЬреЛ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рдХреЗ рдЖрдВрд╢рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ (
рд╕рдЬрд╛ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ)ред рдЙрд╕реА рд╕рдордп, рдПрдХ рдЫрджреНрдо рдкрджреНрдзрддрд┐ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕реЗ __call () рдЬрд╛рджреВ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ (рдлрд┐рд░, рд╕реНрдХреЗрд▓рдореНрдмреБрд░рд┐рд▓) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
abstract class ACurry { protected function curry($callback, $args = array()) { return function() use($callback, $args) { $methodInfo = new ReflectionMethod(get_class($callback[0]), $callback[1]); if (count(array_merge($args, func_get_args())) >= $methodInfo->getNumberOfParameters()) { return call_user_func_array($callback, $args); } else { return $callback[0]->curry($callback, $args); } }; } public function createMethod($methodName, $curryMethodName, $args = array()) { $this->$methodName = $this->curry(array($this, $curryMethodName), $args); return $this; } public function __call($name, $args) { if (property_exists($this, $name) && is_callable($this->$name)) { return call_user_func_array($this->$name, $args); } } }
рдЙрджрд╛рд╣рд░рдг
рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдЖрд╡реЗрджрди рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдпрд╣ рдХреЙрдорд░реЗрдб
рдмреЛрдбрд┐рдЧреНрд░реАрдо рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ
<?php require_once 'ACurry.php'; class Masses extends ACurry{ public function __construct(){ $this->createMethod('ironCube', 'cube', array(7.8)); } public function get($density, $length, $width, $height){ return $density * $length * $width * $height; } public function cube($density, $length){ return $this->get($density, $length, $length, $length); } } $masses=new Masses(); echo $masses->ironCube(2);
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд▓реЛрд╣реЗ рдХреЗ рдШрди () рдЫрджреНрдо рд╡рд┐рдзрд┐ 2 рд╕реЗрдореА рдХреЗ рдХрд┐рдирд╛рд░реЗ рдХреЗ рд╕рд╛рде рдЧреНрд░рд╛рдо рдореЗрдВ рд▓реЛрд╣реЗ рдХреЗ рдШрди рдХреЗ рд╡рдЬрди рдХреА рдЧрдгрдирд╛ рдХрд░рддреА рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд▓реЛрд╣реЗ рдХрд╛ рдШрдирддреНрд╡ 7.8 рдЧреНрд░рд╛рдо / рд╕реЗрдореА┬│ рд╣реИ)ред
рдкрд░рд┐рдгрд╛рдо
рддреЛ рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдирд┐рдХрд▓рд╛ред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рджрд╛рдпрд░рд╛ рдХрд╛рдлреА рдмрдврд╝ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рд╣рдо рд╡рд░реНрдЧ рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рдХрд░реАрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред