PHP рдкрд░рд╛рд╡рд░реНрддрди рдПрдкреАрдЖрдИ рдХрд╛ рдкрд░рд┐рдЪрдп

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдореБрд╕реНрддрдлрд╛ рдордЧрджреА рдХреЗ рд▓реЗрдЦ " PHP рдкрд░рд╛рд╡рд░реНрддрди рдПрдкреАрдЖрдИ рдХрд╛ рдкрд░рд┐рдЪрдп " рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдБред

PHP рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреИрд╕реЗ рдХрд░реЗрдВ




рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐


рдЬрдм рдореИрдВрдиреЗ PHP рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реБрд░реВ рдХреА, рддреЛ рдореБрдЭреЗ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдПрдкреАрдЖрдИ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рдерд╛ред рдореБрдЦреНрдп рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЕрдкрдиреЗ рд╕рд╛рдзрд╛рд░рдг рд╡рд░реНрдЧ, рдореЙрдбреНрдпреВрд▓ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреИрдХреЗрдЬ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред рддрдм рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдПрдХ рдкреНрд░рдореБрдЦ рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИред рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдПрдкреАрдЖрдИ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ:

  1. рдкреНрд░рддрд┐рдмрд┐рдВрдм рдПрдкреАрдЖрдИ рдХреНрдпрд╛ рд╣реИ?
  2. рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рд╡рд┐рдиреНрдпрд╛рд╕
  3. рдХреЗ рдЙрдкрдпреЛрдЧ
  4. рдирд┐рд╖реНрдХрд░реНрд╖
  5. рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ


1. рдкрд░рд╛рд╡рд░реНрддрди рдПрдкреАрдЖрдИ рдХреНрдпрд╛ рд╣реИ


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

/** * Class Profile */ class Profile { /** * @return string */ public function getUserName(): string { return 'Foo'; } } 

рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╡рд░реНрдЧ рдПрдХ рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕ рд╣реИред рдкреНрд░рддрд┐рдмрд┐рдВрдм рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реИ:

 //  $reflectionClass = new ReflectionClass('Profile'); //    var_dump($reflectionClass->getName()); => output: string(7) "Profile" //    var_dump($reflectionClass->getDocComment()); => output: string(24) "/** * Class Profile */" 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, ReflectionClass рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдПрдкреАрдЖрдИ рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рд╣реИред

PHP рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдмрдВрдж рдмреЙрдХреНрд╕ рдХреА рдЪрд╛рдмреА рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЪрд╛рдмреА рд╣реИ
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд▓рд┐рдП:
ReflectionClass : рд░рд┐рдкреЛрд░реНрдЯ рд╡рд░реНрдЧ рдЬрд╛рдирдХрд╛рд░реАред
рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди рдлрдВрдХреНрд╢рди: рд░рд┐рдкреЛрд░реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдЬрд╛рдирдХрд╛рд░реАред
ReflectionParameter : рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
ReflectionClassConstant : рд░рд┐рдкреЛрд░реНрдЯ рд╡рд░реНрдЧ рдирд┐рд░рдВрддрд░ рдЬрд╛рдирдХрд╛рд░реАред

рдЖрдк рдкреВрд░реА рд╕реВрдЪреА php.net рдкрд░ рдЕрдзреНрдпрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

2. рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рд╡рд┐рдиреНрдпрд╛рд╕


рдкреНрд░рддрд┐рдмрд┐рдВрдм рдПрдкреАрдЖрдИ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рднреА рд╕реНрдерд╛рдкрд┐рдд рдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ PHP рдХреЛрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВред

3. рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдХрд┐ рд╣рдо рдкреНрд░рддрд┐рдмрд┐рдВрдм рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдЙрджрд╛рд╣рд░рдг 1:
рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:

 //   class Child extends Profile { } $class = new ReflectionClass('Child'); //     print_r($class->getParentClass()); // ['Profile'] 

рдЙрджрд╛рд╣рд░рдг 2:
getUserName() рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:

 $method = new ReflectionMethod('Profile', 'getUserName'); var_dump($method->getDocComment()); => output: string(33) "/** * @return string */" 

рдЙрджрд╛рд╣рд░рдг 3:
рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ instanceOf рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 $class = new ReflectionClass('Profile'); $obj = new Profile(); var_dump($class->isInstance($obj)); // bool(true) //    var_dump(is_a($obj, 'Profile')); // bool(true) //    var_dump($obj instanceof Profile); // bool(true) 

рдЙрджрд╛рд╣рд░рдг 4:
рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдЖрдк рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдЖрд╢реНрдЪрд░реНрдп рд╕реЗ рдлрдВрд╕ рд╕рдХрддреЗ рд╣реИрдВ, "рдореИрдВ рдПрдХ рдирд┐рдЬреА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?"

рдЪрд┐рдВрддрд╛ рдордд рдХрд░реЛ, рдпрд╣рд╛рдБ рдЪрд╛рд▓ рд╣реИ:

 //    getName() private function getName(): string { return 'Foo'; } $method = new ReflectionMethod('Profile', 'getUserName'); //          if ($method->isPrivate()) { $method->setAccessible(true); } echo $method->invoke(new Profile()); // Foo 

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

4. рдирд┐рд╖реНрдХрд░реНрд╖


PHP рдПрдХ рдкреВрд░реНрдг рдкреНрд░рддрд┐рдмрд┐рдВрдм рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ OOP рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХреНрд╖реЗрддреНрд░реЛрдВ рддрдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

5. рд╕рдиреНрджрд░реНрдн



рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ:

рдЖрдк рд╕реНрдЯрдм рдХреНрд▓рд╛рд╕ рдореЗрдВ рдХреЛрдбрдкреНрд╢рди рдкреИрдХреЗрдЬ рдореЗрдВ рдкрд░рд╛рд╡рд░реНрддрди рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╣ рд╡рд░реНрдЧ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХреЛ рдбреБрдмрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

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

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


All Articles