рдЕрд╡рд░реЛрдзрди рд╡рд┐рдзрд┐ рдЬрдм PHP рдореЗрдВ __call () рдФрд░ __callStatic () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрд▓ рдХрд░рддреА рд╣реИ

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░рддрд┐рдорд╛рди рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХреАред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд▓реЗрдЦ php рдЧреБрд░реБ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рдкреНрд░рддреАрдд рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рдмрд╕ рднрд╛рд╖рд╛ рдХрд╛ рдкрддрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдиреБрдХрд╕рд╛рди рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред рд▓реЗрдЦ OOP рдкрд░ рдПрдХ рдореИрдиреБрдЕрд▓ рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред

__Call () рдФрд░ __callStatic () рдХреНрдпрд╛ рд╣реИрдВ?


рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ: рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рддрд░реАрдХреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ (рдЬреЛ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рддрд╛рд░реНрдХрд┐рдХ рд╣реИ)ред рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдХреЛрдИ рдирд╣реАрдВ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рд╣реИред рдЖрдкрдХреЛ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ? рдпрд╣ рд╕рд╣реА рд╣реИ - рдПрдХ рдШрд╛рддрдХ рдЧрд▓рддреА! рдиреАрдЪреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХреЛрдб рд╣реИред

<?php class OurClass{} $Object=new OurClass; $Object->DynamicMethod(); # Fatal error: Call to undefined method OurClass::DynamicMethod() ?> 


рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╣рдо рдПрдХ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ:

 <?php class OurClass{} OurClass::StaticMethod(); # Fatal error: Call to undefined method OurClass::StaticMethod() ?> 


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

 <?php class OurClass { public function __call($name,array $params) { echo '   $Object->'.$name.',    ,    '.__METHOD__.'()<br>' .PHP_EOL; return; } public static function __callStatic($name,array $params) { echo '   '.__CLASS__.'::'.$name.',    ,    '.__METHOD__.'()'; return; } } $Object=new OurClass; #   $Object->DynamicMethod,    ,    OurClass::__call() $Object->DynamicMethod(); #   OurClass::StaticMethod,    ,    OurClass::__callStatic() OurClass::StaticMethod(); ?> 


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

 <?php abstract class Manager { public $content_storage=''; public function __toString() { return $this->content_storage; } public function __call($name,array $params) { $this->content_storage.=$this->_GetObject($name,$params).'<br>'.PHP_EOL; return $this; } } abstract class EntryClass { public static function Launch() { return new FluentInterface; } } class FluentInterface extends Manager { public function __construct() { /** * -  */ } public static function _GetObject($n,array $params) { return $n; } } echo $FI=EntryClass::Launch() ->First() ->Second() ->Third(); /*  First Second Third */ ?> 


рдХреНрдпрд╛ рдЖрдк рд╣рдореЗрдВ рдЕрд╡рд░реЛрдзрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?


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

 <?php abstract class Base { public function __call($n,array$p) { echo __METHOD__.' says: '.$n; } } class Main extends Base { public function __construct() { self::Launch(); } } $M=new Main; ?> 


рдкреЗрдЬ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдореЗрд░реЗ рдЖрд╢реНрдЪрд░реНрдп рдХреЛ рдХреЛрдИ рд╕реАрдорд╛ рдирд╣реАрдВ рдереАред рдореИрдВ рддреБрд░рдВрдд рдореИрдиреБрдЕрд▓ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП php.net рдкрд░ рднрд╛рдЧрд╛ред
рдпрд╣рд╛рдБ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдПрдХ рдЕрдВрд╢ рд╣реИ
 public mixed __call ( string $name , array $arguments ) public static mixed __callStatic ( string $name , array $arguments ) 

рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рджреБрд░реНрдЧрдо рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╕рдордп, __call () рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрджрд░реНрдн рдореЗрдВ, рджреБрд░реНрдЧрдо рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ __callStatic () рд╡рд┐рдзрд┐ рдХрд╣рд▓рд╛рддрд╛ рд╣реИред

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

 <?php abstract class Base { public function __call($n,array$p) { echo __METHOD__.' says: '.$n; } } class Main extends Base { public function __construct() { self::Launch(); } } $M=new Main; Main::Launch(); #    .    Fatal error: Call to undefined method Main::Launch() ?> 


рдпрд╣реА рд╣реИ, рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрджрд░реНрдн - рдХрд▓рд╣ рдХрд╛ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрджрд░реНрднред
рдЪрдорддреНрдХрд╛рд░ рдФрд░ рдмрд╣реБрдд рдХреБрдЫред рдЬрдм рдореИрдВрдиреЗ "рдЬрд╛рджреВ рдХреЗ рддрд░реАрдХреЛрдВ" рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛, рддреЛ рдореИрдВрдиреЗ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдирд╛рдо рдХреЛ рд╕рдЪрдореБрдЪ рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЦреИрд░, рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ: рдпрджрд┐ рд╣рдо рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ __callStatic () рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдШрд╛рддрдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, PHP __callStatic () рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ред

рд╕рд╛рд░рд╛рдВрд╢


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

 <?php abstract class Base { public function __call($n,array$p) { echo __METHOD__.' says: '.$n; } } class Main extends Base { public function __construct() { #      Base::__call() self::Launch(); static::Launch(); Main::Launch(); } } $M=new Main; ?> 


рд▓реЗрдЦ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╕рд░рд▓ рд╣реИ: рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣) рдФрд░ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред

poskriptum


рдореИрдВрдиреЗ рдмрдЧ рдЯреНрд░реИрдХрд░ рдХреЛ рджреЗрдЦрд╛, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореБрдЭреЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ ред рд▓реЗрдХрд┐рди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдмрдЧ рдПрдХ рдмрдЧ рдирд╣реАрдВ рдереА, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реИред

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


All Articles