рдореИрдЬрд┐рдХ рдкреАрдПрдЪрдкреА рдХрд╛ рд╕реНрдХреВрд▓

PHP рдореЗрдВ рдХреНрдпрд╛ рдЬрд╛рджреВ рд╣реИ? рдЗрд╕рдХрд╛ рдорддрд▓рдм рдЖрдорддреМрд░ рдкрд░ _construct() рдпрд╛ __get() рдЬреИрд╕реЗ рддрд░реАрдХреЛрдВ рд╕реЗ рд╣реИред PHP рдореЗрдВ рдЬрд╛рджреВ рдХреЗ рддрд░реАрдХреЗ рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрджреНрднреБрдд рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рдиреЗрдЯрд╡рд░реНрдХ рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рд╕реЗ рднрд░рд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рд╢рд╛рдпрдж рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдХрд╣реЗрдВ рдХрд┐ рдЖрдкрдиреЗ рдЕрд╕рд▓реА рдЬрд╛рджреВ рднреА рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ? рдЖрдЦрд┐рд░рдХрд╛рд░, рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдпрд╣ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рдм рдХреБрдЫ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЙрддрдирд╛ рд╣реА рдЕрдзрд┐рдХ рдЬрд╛рджреВ рдЖрдкрдХреЛ рдЦрддреНрдо рдХрд░ рджреЗрддрд╛ рд╣реИред



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


рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рд▓рд┐рд╕рд╛рдЪреЗрдВрдХреЛ рдЕрд▓реНрдкрд╛рд░реА рдореЗрдВ рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдФрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╡рд┐рднрд╛рдЧ рдХреЗ рдкреНрд░рдореБрдЦ рд╣реИрдВред рд▓реЗрдЦрдХ рдФрд░ рдкрд╣рд▓реВ рдЙрдиреНрдореБрдЦ рдврд╛рдВрдЪреЗ рдХреЗ рдкреНрд░рдореБрдЦ рдбреЗрд╡рд▓рдкрд░ рдЬрд╛рдУ! рдПрдУрдкреА ред PHP рдкрд░ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдп рд╕рдореНрдореЗрд▓рдиреЛрдВ рдореЗрдВ рдЕрдзреНрдпрдХреНрд╖ред

рдЕрдЪреНрдЫреА рдлрд┐рд▓реНрдо рдореЗрдВ "рдзреЛрдЦреЗ рдХрд╛ рднреНрд░рдо" рдПрдХ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рд╣реИ:
"рдЖрдк рдЬрд┐рддрдиреЗ рдХрд░реАрдм рд╣реЛрдВрдЧреЗ, рдЖрдкрдХреЛ рдЙрддрдирд╛ рд╣реА рдХрдо рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред"

PHP рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдпрд╣реА рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдЬрд╛рджреВ рдХреА рдЪрд╛рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛ рдЖрдкрдХреЛ рдЕрд╕рд╛рдорд╛рдиреНрдп рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЖрдкрдХреЛ рдзреЛрдЦрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛: "... рдПрдХ рдРрд╕реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЬрд┐рд╕реЗ рдзреЛрдЦрд╛ рджреЗрдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд╣реИ, рдпрд╛ рддреЛ рдХрд┐рд╕реА рдХреЛ рдзреЛрдЦрд╛ рджреЗрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╛ рдПрдХ рдордЬрд╛рдХ рдпрд╛ рдордиреЛрд░рдВрдЬрди рдХреЗ рд░реВрдк рдореЗрдВред"

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

рдЬрд╛рджреВ рдХреЗ рдЙрдкрдХрд░рдг


рд╣рдореЗрдВ рдЬрд╛рджреВ рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рд╕реЗ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП? рджрд░реНрдж рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рддрд░реАрдХреЗред

__construct(), __destruct(), __clone(),
__call(), __callStatic(),
__get(), __set(), __isset(), __unset(),
__sleep(), __wakeup(),
__toString(), __invoke(), __set_state(),
__debugInfo()


рдореИрдВ рдЕрдВрддрд┐рдо рд╡рд┐рдзрд┐ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдиреЛрдЯ рдХрд░реВрдВрдЧрд╛ - рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдк рдЕрд╕рд╛рдорд╛рдиреНрдп рдЪреАрдЬреЛрдВ рдХреЛ рдХреНрд░реИрдВрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИред

  • declare(ticks=1) ред
  • debug_backtrace() ред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рд╕рд╛рдереА рд╣реИ рдХрд┐ рд╣рдо рд╡рд░реНрддрдорд╛рди рдХреЛрдб рдореЗрдВ рдХрд╣рд╛рдВ рд╣реИрдВ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдореЗрдВ рдХрд┐рд╕рдиреЗ рдФрд░ рдХреНрдпреЛрдВ, рдХрд┐рд╕ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ред рд╕рднреА рддрд░реНрдХ рдХрд╛ рдкрд╛рд▓рди рди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред
  • unset(), isset() ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпреЗ рдбрд┐рдЬрд╛рдЗрди рдмрд╣реБрдд рд╕рд╛рд░реА рдЪрд╛рд▓реЗрдВ рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рдкрд░ рд╣рдо рдЖрдЧреЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
  • by-reference passing ред рдЬрдм рд╣рдо рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдпрд╛ рдЪрд░ рдХреЛ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рдЙрдореНрдореАрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреБрдЫ рдЬрд╛рджреВ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛ред
  • bound closures ред рдмрдВрдж рд╣реЛрдиреЗ рдФрд░ рдЗрд╕ рддрдереНрдп рдкрд░ рдХрд┐ рд╡реЗ рдмрд╛рдВрдз рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рдмрд╣реБрдд рд╕рд╛рд░реА рдЪрд╛рд▓реЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
  • рдкреНрд░рддрд┐рдмрд┐рдВрдм рдПрдкреАрдЖрдИ рдПрдХ рдирдП рд╕реНрддрд░ рдкрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдм рд▓реЗрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
  • StreamWrapper APIред

рдЙрдкрдХрд░рдг рддреИрдпрд╛рд░ рд╣реИ - рдореИрдВ рдЬрд╛рджреВ рдХреЗ рдкрд╣рд▓реЗ рдирд┐рдпрдо рдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдКрдВрдЧрд╛ред

рдХрдорд░реЗ рдореЗрдВ рд╣рдореЗрд╢рд╛ рд╕рдмрд╕реЗ рдЪрддреБрд░ рдЖрджрдореА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЯреНрд░рд┐рдХ # резред рдЕрд╕рдВрднрд╡ рддреБрд▓рдирд╛


рдЪрд▓реЛ рдкрд╣рд▓реА рдЪрд╛рд▓ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдореИрдВ рдЕрд╕рдВрднрд╡ рддреБрд▓рдирд╛ рдХрд╣рддрд╛ рд╣реВрдВред
рдХреЛрдб рдХреЛ рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦреЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ PHP рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред



рдПрдХ рдЪрд░ рд╣реИ, рд╣рдо рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЕрдЪрд╛рдирдХ рдпрд╣ рдЦреБрдж рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдирд╣реАрдВ рдПрдХ рдирдВрдмрд░


NaN рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдЬрд╛рджреБрдИ рдХрд▓рд╛рдХреГрддрд┐ рд╣реИ - рдиреЙрдЯ-рдП-рдирдВрдмрд░ред



рдЗрд╕рдХреА рдЕрджреНрднреБрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрд╡рдпрдВ рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИред рдФрд░ рдпрд╣ рд╣рдорд╛рд░реА рдкрд╣рд▓реА рдЪрд╛рд▓ рд╣реИ: рджреЛрд╕реНрдд рдХреА рдкрд╣реЗрд▓реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП NaN рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд▓реЗрдХрд┐рди NaN рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред

рд╣рдо рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ




рдЪрд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо namespace рд▓рд┐рдП false рдХреЛ true рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрд╢реБрдн рдбреЗрд╡рд▓рдкрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЖрд╢реНрдЪрд░реНрдп рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреНрдпреЛрдВ true рдФрд░ false рдирд╣реАрдВ false ред

рд╣реИрдВрдбрд▓рд░


рдЕрдЧрд▓реА рдЪрд╛рд▓ рджреЛ рдкрд┐рдЫрд▓реЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рддреЛрдкрдЦрд╛рдиреЗ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред



рдЯреНрд░рд┐рдХ tick_function рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, declare(ticks=1) ред

рдпрд╣ рд╕рдм рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕рдВрджрд░реНрдн рд╕реЗ рдпрд╣ isMagic рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдпрд╣ рдЗрд╕ рдорд╛рди рдХреЛ true рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ true ред рдЬрдм рд╣рдордиреЗ declare(ticks=1) рдШреЛрд╖рд┐рдд declare(ticks=1) рдмрд╛рдж, PHP рджреБрднрд╛рд╖рд┐рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╛рдердорд┐рдХ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рдж register_tick_function - рдХреЙрд▓рдмреИрдХ рдХрд╣рддрд╛ рд╣реИред рдЗрд╕ рдХреЙрд▓рдмреИрдХ рдореЗрдВ, рд╣рдо рдЙрд╕ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ false рд╕реЗ true ред рдЬрд╛рджреВ!

рдЯреНрд░рд┐рдХ # реиред рдЬрд╛рджреВ рдХреЗ рднрд╛рд╡


рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реЗрдВ рдЬрд┐рд╕рдореЗрдВ рджреЛ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ false , рджреВрд╕рд░реА true ред рд╣рдо isBlack рдФрд░ isWhite рдФрд░ var_dump рдкрд░рд┐рдгрд╛рдо рд╣реИред рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реЛрдЧрд╛?



рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕рдВрдЪрд╛рд▓рдХ ред рд╕рд╣реА рдЙрддреНрддрд░ false , рдХреНрдпреЛрдВрдХрд┐ PHP рдореЗрдВ "рдСрдкрд░реЗрдЯрд░ рдкреВрд░реНрд╡рддрд╛" рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬ рд╣реИред



рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ, рддрд╛рд░реНрдХрд┐рдХ рдСрдкрд░реЗрдЯрд░ or рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрд╢рди рдХреА рддреБрд▓рдирд╛ or рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХреЗрд╡рд▓ false рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ isWhite рднреА рдЕрдиреНрдп рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЗ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдЧрд╛ред

рдЬрд╛рджреВ рдХреЗ рднрд╛рд╡


рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдХреБрдЫ рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░, рдФрд░ рдХреБрдЫ рдХрд╛рд░рдЦрд╛рдиреЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреЛрдб рдЖрдЧреЗ рд╣реЛрдЧрд╛ред



рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред

 $value = new $factory->build(Foo::class); 

рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдЬреЛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

  • $factory рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдХреНрд╖рд╛ рдХреЗ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛;
  • рдПрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреА;
  • рдХреЙрд▓ $factory->build() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕ рдореВрд▓реНрдп рдкрд░ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рдЖрдПрдЧрд╛, рдкрд░рд┐рдгрд╛рдо new рд╣реЛрдЧрд╛;
  • $factory->build рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд▓рд╛рд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЖрдЗрдП рдЕрдВрддрд┐рдо рд╡рд┐рдЪрд╛рд░ рджреЗрдЦреЗрдВред $factory рд╡рд░реНрдЧ рдореЗрдВ, рд╣рдо рдЬрд╛рджреВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рд▓рд┐рдЦреЗрдВрдЧреЗ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ: рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ invoke рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред

 class Factory { public function _get($name) {echo "Getting property {$name}"; return Foo::class;} public function _call($name, $arg) {echo "Calling method {$name}"; return Foo::class;} public function _invoke($name) {echo "Invoking {$name}"; return Foo::class;} } 

рд╕рд╣реА рдЙрддреНрддрд░: рд╣рдо рдПрдХ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИред $factory->build рдмрд╛рдж $factory->build рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗред

рд╡реИрд╕реЗ, рдЗрд╕ рд░реВрдкрд░реЗрдЦрд╛ рдореЗрдВ рдореИрдВрдиреЗ "рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд░реЛрдХрдирд╛" рдирд╛рдордХ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ - рдЖрдк рдЗрд╕ рдбрд┐рдЬрд╛рдЗрди рдХреЛ "рд▓реЙрдХ" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд╛рд░реНрд╕рд░ рд▓реЛрдлреЛрд▓


рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг PHP рдкрд╛рд░реНрд╕рд░ рдХреЗ рд▓рд┐рдП рд╣реА рд╣реИред рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрднреА рдХреЙрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдпрд╛ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреЗ рдЕрдВрджрд░ рд╡реИрд░рд┐рдПрдмрд▓ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рд╣реИ?



рдореБрдЭреЗ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдпрд╣ рдЯреНрд░рд┐рдХ рдорд┐рд▓реА, рдпрд╣ рдмреЗрд╣рдж рдЕрдорд╛рдирдХ рд╣реИред

 $result = ${'_' . !$_=getCallback()}(); $_=getCallback(); // string(5) "hello" !$_=getCallback()}(); // bool(false) '_'.!$_=getCallback()}(); // string(1) "_" ${'_'.!$_=getCallback()}(); // string(5) "hello" 

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЛ _ (рдЕрдВрдбрд░рд╕реНрдХреЛрд░) рдирд╛рдо рдХреЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЪрд░ рд╣реИ, рд╣рдо рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЙрд▓рдЯрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо false - рд▓рд╛рдЗрди рдХреЛ true рдорд╛рди рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ true ред рдлрд┐рд░ рд╣рдо рдЗрд╕реЗ рдЪрд░ рдирд╛рдо рд╕реЗ рд╕рднреА рдХреЛ рдПрдХ рд╕рд╛рде рдЧреЛрдВрдж рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдо рдлрд┐рд░ рдШреБрдВрдШрд░рд╛рд▓реЗ рдХреЛрд╖реНрдардХ рдХреЗ рдЕрдВрджрд░ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВред

рдЬрд╛рджреВ рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рдордиреЛрд░рдВрдЬрди рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдкреНрд░реЗрд░рд┐рдд, рдЕрд╕рд╛рдорд╛рдиреНрдп рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдХрд╣рддреЗ рд╣реИрдВ: тАЬрдХреНрдпрд╛? рддреЛ рдпрд╣ рд╕рдВрднрд╡ рдерд╛? тАЭ

рдЯреНрд░рд┐рдХ # рейред рдирд┐рдпрдо рддреЛрдбрд╝рдирд╛


PHP рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдЬреЛ рдкрд╕рдВрдж рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЙрди рдирд┐рдпрдореЛрдВ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рд░ рдХреЛрдИ рд╕реБрдкрд░-рд╕рд┐рдХреНрдпреЛрд░ рд╣реЛрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдмрдирд╛рддрд╛ рд╣реИред рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИ рдЬрд┐рд╕реЗ "рд╕реАрд▓ рдХреНрд▓рд╛рд╕" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдирд┐рдЬреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реЛрддрд╛ рд╣реИред рдЬрд╛рджреВрдЧрд░ рдХреЗ рдЫрд╛рддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдкрдХрд╛ рдХрд╛рд░реНрдп рдЗрд╕ рдХрдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ рд╣реИред



рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣рд▓


рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрд╡рд▓рдкрд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдпрд╣ рдорд╛рдирдХ рдПрдкреАрдЖрдИ рд╣реИ рдЬреЛ рднрд╛рд╖рд╛ рд╣рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред



newInstanceWithoutConstructor рдирд┐рд░реНрдорд╛рдг рдЖрдкрдХреЛ рднрд╛рд╖рд╛ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдирд┐рдЬреА рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рд╕рднреА рдирд┐рдЬреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдП рдХрдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИред

рд╡рд┐рдХрд▓реНрдк рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╕рд░рд▓ рд╣реИ, рдХрд┐рд╕реА рднреА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рд╢реЙрд░реНрдЯ рд╕рд░реНрдХрд┐рдЯ


рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рдФрд░ рдХреМрд╢рд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рддрдм рдЙрд╕ рд╡рд░реНрдЧ рдХреЗ рдУрд╕реНрдкреНрд░реЗ рдХреЛ рдмрд╛рдВрдзрддрд╛ рд╣реИред



рдпрд╣рд╛рдВ рд╣рдо рдХреНрд▓рд╛рд╕ рдХреЗ рдЕрдВрджрд░ рд╣реИрдВ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдирд┐рдЬреА рддрд░реАрдХреЛрдВ рд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреЗ рд╕рдВрджрд░реНрдн рд╕реЗ new static рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред



deserializing


рддреАрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕рдмрд╕реЗ рдЙрдиреНрдирдд рд╣реИред



рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрдВрдХреНрддрд┐ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рдорд╛рдиреЛрдВ рдХреЛ рд╡рд╣рд╛рдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ - рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧреАред



рдбрд┐рд╕реЗрд░рд┐рдПрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЕрдкрдирд╛ instance рдорд┐рд▓рддрд╛ рд╣реИред

рд╕рд┐рджреНрдзрд╛рдВрдд / рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рдкреИрдХреЗрдЬ


рдЬрд╛рджреВ рдЕрдХреНрд╕рд░ рдПрдХ рдкреНрд░рд▓реЗрдЦрд┐рдд рдврд╛рдВрдЪрд╛ рдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрди рдЬрд╛рддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд┐рджреНрдзрд╛рдВрдд / рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рдореЗрдВ рдпрд╣ рд╕рдм рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреЗ рд╕рд╛рде рдХреЛрдИ рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

 composer show doctrine/instantiator --all name : doctrine/instantiator descrip. : A small, lightweight utility to instantiate objects in PHP without invoking their constructors keywords : constructor, instantiate type : library license : MIT License (MIT) 

рдЯреНрд░рд┐рдХ # 4 рд╕рдВрдкрддреНрддрд┐ рдХреА рдкрд╣реБрдВрдЪ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдирд╛


рдмрд╛рджрд▓ рдПрдХрддреНрд░рд┐рдд рд╣реЛ рд░рд╣реЗ рд╣реИрдВ: рд╡рд░реНрдЧ рдЧреБрдкреНрдд рд╣реИ, рдЧреБрдг рдФрд░ рдирд┐рд░реНрдорд╛рддрд╛ рдирд┐рдЬреА рд╣реИрдВ, рдФрд░ рдХреЙрд▓рдмреИрдХ рднреАред

 class Secret { private $secret = 42; private function _construct() { echo 'Secret is: ', $this->secret; } private function onPropAccess(string $name) { echo "Accessing property {$name}"; return 100500; } } // How to create a secret instance and intercept the secret value? 

рд╡рд┐рдЬрд╛рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░рд╛ рдХрд╛рдо, рдХрд┐рд╕реА рддрд░рд╣ рдХреЙрд▓рдмреИрдХ рдХрд░рдирд╛ рд╣реИред

рдЬрд╛рджреВ рдЬреЛрдбрд╝рдирд╛ ... рдкрд╛рдиреЗ рд╡рд╛рд▓рд╛


рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреБрдЯрдХреА рдЬрд╛рджреВ рдЬреЛрдбрд╝реЗрдВред



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



рдЕрдм рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдХреЙрд▓рдмреИрдХ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рд╕рд░реНрдХрд┐рдЯ рдХреЗ рдЕрдВрджрд░ "рдкрд░реЗрд╢рд╛рди"


рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреНрд▓реЛрдЬрд░ рдмрдирд╛рдПрдВред рдХреНрд▓реЛрдЬрд░ рдХреЗ рдЕрдВрджрд░ рдЬреЛ рдХрдХреНрд╖рд╛ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реИ, рд╣рдо рдЗрд╕ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ unset() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╣рдЯрд╛рддреЗ рд╣реИрдВред



unset рдЖрдкрдХреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рдЬрд╛рджреВ get рд╡рд┐рдзрд┐ рдХрд╣рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рд╣рдо рдкреНрд░рд╛рдЗрд╡реЗрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдмреБрд▓рд╛рддреЗ рд╣реИрдВ


рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирд┐рдЬреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИ рдЬреЛ echo рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЖрдк рдмрд╕ рдЗрд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдХреЗ рд╕реБрд▓рдн рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред



рддреЛ рд╣рдорд╛рд░рд╛ рдЧреБрдкреНрдд рд╡рд░реНрдЧ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдЯреВрдЯ рдЧрдпрд╛ред



рд╣рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдорд┐рд▓рд╛ рдХрд┐ рд╣рдо:

  • рдкрдХрдбрд╝рд╛;
  • рдХреБрдЫ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд▓реМрдЯрд╛ред

leedavis / altr-ego рдкреИрдХреЗрдЬ


рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЬрд╛рджреВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИрдВред рд╡реЗрджреА-рдЕрд╣рдВрдХрд╛рд░ рдкреИрдХреЗрдЬ рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рдШрдЯрдХ рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред

 composer show leedavis81/altr-ego --all name : leedavis81/altr-ego descrip. : Access an objects protected / private properties and methods keywords : php, break scope versions : dev-master, v1.0.2, v1.0.1, v1.0.0 type : library license : MIT License (MIT) 

рдЖрдк рдЕрдкрдиреА рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдореЗрдВ рдПрдХ рд╕реЗрдХреЗрдВрдб рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рд╡рд╣ рдЖрдЬреНрдЮрд╛рдХрд╛рд░реА рд░реВрдк рд╕реЗ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЖрдкрдХреА рд╕рднреА рдЗрдЪреНрдЫрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛ред

рдЯреНрд░рд┐рдХ # 5 PHP рдореЗрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╡рд╕реНрддреБрдПрдБ


рдХреНрдпрд╛ PHP рдореЗрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╡рд╕реНрддреБ рд╣реИрдВ? рд╣рд╛рдВ, рдФрд░ рдмрд╣реБрдд, рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рддрдХред

 namespace Magic { $object = (object) [ "\0Secret\0property" => 'test' ]; var_dump($object); } 

рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рд╕рд░рдгреА рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХреБрдВрдЬреА рд╣реЛрддреА рд╣реИ ред рдпрд╣ рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди \0 рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ - рдпрд╣ рдПрдХ рд╢реВрдиреНрдп рдмрд╛рдЗрдЯ рдХреИрд░реЗрдХреНрдЯрд░ рд╣реИ, рдФрд░ Secret рдмрд╛рдж рд╣рдо \0 рднреА рджреЗрдЦрддреЗ рд╣реИрдВред

рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ PHP рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рднреАрддрд░ рдПрдХ рдирд┐рдЬреА рд╕рдВрдкрддреНрддрд┐ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЕрд░реИ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрд╕реА рдХреБрдВрдЬреА рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ stdClass рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕рдореЗрдВ Secret рд╡рд░реНрдЧ рд╕реЗ рдПрдХ рдирд┐рдЬреА рд╕рдВрдкрддреНрддрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ test рдмрд░рд╛рдмрд░ рд╣реИред

 object(stdClass) [1] private 'property' (Secret) => string 'test' (length=4) 

рдПрдХрдорд╛рддреНрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ - рдлрд┐рд░ рдЖрдк рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╡рд╣рд╛рдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдпрд╣ рдмрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред

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

рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ - рдПрдХ рдбреАрдЯреАрдУ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕рдореЗрдВ рд╕рднреА рдЧреБрдгреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ (рдкрд┐рдЫрд▓реА рдЪрд╛рд▓ рджреЗрдЦреЗрдВ)ред

рд╣рдо рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдЬрдЧрд╣ рдореЗрдВ рдЙрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рд╡рд╣рд╛рдВ рд╕реЗ рдХреИрдкреНрдЪрд░ рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рдХрд┐рд╕реА рднреА рддрд░реАрдХреЗ рд╕реЗ рджреБрд░реНрдЧрдо рд╣реЛрдВрдЧреЗ: рди рддреЛ reflection , рди рд╣реА рдмрдВрдж, рдФрд░ рди рд╣реА рдЕрдиреНрдп рдЬрд╛рджреВред рд▓реЗрдХрд┐рди рдЕрдирд┐рд╢реНрдЪрд┐рддрддрд╛ рд╣реИ - рдХреНрдпрд╛ PHP рдореЗрдВ рдРрд╕реА рдХреЛрдИ рдЬрдЧрд╣ рд╣реИ рдЬреЛ рдХреБрдЫ рдЪрд░реЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрдЧреА рддрд╛рдХрд┐ рдХреЛрдИ рдЪрд╛рд▓рд╛рдХ рдпреБрд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╡рд╣рд╛рдВ рди рдкрд╣реБрдВрдЪреЗ?

рд╣рдо рдПрдХ рдЬрд╛рджреВ рдкрджреНрдзрддрд┐ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдк рдЗрд╕ рдореВрд▓реНрдп рдХреЛ рдкрдврд╝ рд╕рдХреЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬрд╛рджреВ getters , рдЬрд╛рджреВ рдХреА isset рддрд░реАрдХреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

рдЪрд▓реЛ рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕реНрдерд╛рди рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдЦреЛрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

  • Global variables рд░рджреНрдж Global variables рджрд┐рдП рдЧрдП рд╣реИрдВ - рдХреЛрдИ рднреА рдЙрдиреНрд╣реЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред
  • Public properties рднреА рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВред
  • Protected properties рддреЛ рдРрд╕рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрдЪреНрдЪреЗ рд╡рд░реНрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд┐рд▓реЗрдЧрд╛ред
  • Private properties ред рдХреЛрдИ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрдВрдж рд╣реЛрдиреЗ рдпрд╛ reflection рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • Private static properties рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди reflection рднреА рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рдЬрд╛рджреВ рдХреА рдмрд╛рдд рдереА - Static variables in functions - рдпреЗ рд╡реЗ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╣реИрдВ рдЬреЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдЕрдВрджрд░ рд╣реЛрддреЗ рд╣реИрдВред

рдореВрд▓реНрдпреЛрдВ рдХрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рднрдВрдбрд╛рд░рдг


рдореИрдВрдиреЗ рдирд┐рдХрд┐рддрд╛ рдкреЛрдкреЛрд╡ рдФрд░ рдЬреЗ рд╡реЙрдЯрдХрд┐рдВрд╕ рд╕реЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдЪреИрдирд▓ рдкрд░ рдкреВрдЫрд╛ред



рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕рдХреЗ рднреАрддрд░ рдПрдХ рд╕реНрдерд┐рд░ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдЗрд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЗрд╕реЗ рдмрджрд▓ рджреЗрдВ? рдЬрд╡рд╛рдм рд╣реИ рдирд╣реАрдВред

рд╣рдореЗрдВ рд╕рдВрд░рдХреНрд╖рд┐рдд рдЪрд░ рдХреА рджреВрд╕рд░реА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рдЦрд╛рдореА рдорд┐рд▓реА рд╣реИ рдФрд░ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд▓рд┐рдВрдХ рджреНрд╡рд╛рд░рд╛ рдорд╛рди рдкрд╛рд░рд┐рдд рдХрд░рдирд╛


рд╣рдо рдЗрд╕реЗ рдЧреИрд░-рдорд╛рдирдХ рд░реВрдк рд╕реЗ рд╡рд╕реНрддреБ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдЖрдк рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдХреНрд▓рд╛рд╕рд┐рдХ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред



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

рд░рд╛рдЬреНрдп рдмрдЪрд╛рдУ


рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд░рд╛рдЬреНрдп рдХреИрд╕реЗ рдмрдЪрд╛ рд╣реИред



рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП, рд╣рдо spl_object_id рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЬреЛ State рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд╕реНрддреБ рд╕реЗ рдорд┐рд▓рд╛ рд╣реИ, рд╡рд╣ рд╡рд╣рд╛рдВ рдмрдЪрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВред

рд╡рд╕реНрддреБ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ


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



рд░рд╛рдЬреНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ


рдлрд┐рд░ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред



рд╣рдо рдЗрд╕ рд╕рдВрджрд░реНрдн рдХреЛ рдЬрд╛рджреВ рдХрд░рдиреЗ getter рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЙрд╕рдореЗрдВ рд╕реЗ рдмреБрд▓рд╛рддреЗ рд╣реИрдВред рдЕрдм рдХреЛрдИ рднреА рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ рдЗрд╕ Trait рдЬреБрдбрд╝реЗ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рджред



рд╕рднреА рдЬрд╛рджреВ рдкрджреНрдзрддрд┐рдпрд╛рдВ рдЕрддрд┐рдкреНрд░рд╛рдкреНрдд рд╣реИрдВ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВред



рд▓рд┐рд╕рд╛рдЪреЗрдВрдХреЛ / рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╡рд╕реНрддреБ


рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕рдм рдХреБрдЫ рддреБрд░рдВрдд рдФрдкрдЪрд╛рд░рд┐рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрддрд╛ рд╣реИред

 composer show /immutable-object --all name : /immutable-object descrip. : Immutable object library keywords : versions : * dev-master type : library license : MIT License (MIT) 

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрд╣реБрдд рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧреБрдг рд╣реИрдВ: рдирд┐рдЬреА, рд╕рдВрд░рдХреНрд╖рд┐рдд рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХред рд╣рдо ImmutableTrait рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред



рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдмрд╛рд░ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рджреЗрдЦреЗрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣рд╛рдВ рдмрдЪрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреАрдЯреАрдУ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред

 object (MagicObject) [3] public 'value' => int 200 

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ ...



... рддреЛ рддреБрд░рдВрдд рдПрдХ fatal exception рдорд┐рд▓рддрд╛ fatal exception ред рд╣рдо рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИред рдРрд╕рд╛ рдХреИрд╕реЗ?



рдпрджрд┐ рдЖрдк рдПрдХ рд░реЛрдорд╛рдВрдЪрдХ рдЪреБрдиреМрддреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдорд┐рдЯрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рд▓рддреЗ рд╣реИрдВ



рдпрд╣ рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рд╣реИред рдЬреИрд╕реЗ рд╣реА рдЖрдк рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ PHPStorm рдХреЗ рдЕрдВрджрд░ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рддреБрд░рдВрдд рдЖрдкрдХреЗ рдЖрджреЗрд╢ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛ред рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рддреВрд▓ рджреЗрдВ - рдпрд╣ рдмрд╣реБрдд рдЦрддрд░рдирд╛рдХ рд╣реИред рд╡рд╣ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдЧрд╛ рдХрд┐ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред

рдЯреНрд░рд┐рдХ # 6 рдзрд╛рдЧрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг


рдбрд┐рдЬрд╛рдЗрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

 include 'php://filter/read=string.toupper/resource=magic.php'; 

рдХреБрдЫ рдЬрд╛рджреБрдИ рд╣реИ: рдПрдХ PHP рдлрд╝рд┐рд▓реНрдЯрд░, read , рдЕрдВрдд рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЬрд╛рджреВред php рдлрд╝рд╛рдЗрд▓ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ ред рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдмрд╣реБрдд рд╕рд░рд▓ рд▓рдЧрддреА рд╣реИред

 <?php echo 'Hello, world!' 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдорд╛рдорд▓рд╛ рдЕрд▓рдЧ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдЧрд░ рд╣рдо рдЕрдкрдиреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ "рдкреЙрдкреНрдпреБрд▓реЗрдЯ" рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рдорд┐рд▓рддрд╛ рд╣реИ:

 HELLO, WORLD! 

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

рдореЗрд░реЗ рдкрд╣рд▓реВ рдврд╛рдВрдЪреЗ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдЗрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЬрдм рдЖрдкрдХрд╛ рд╡рд░реНрдЧ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред

PHP рдореЗрдВ рдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд╣рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреИрдпрд╛рд░ рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЧреБрдЪреНрдЫрд╛ рд╣реИред

 var_dump(stream_get_filters()); array (size=10) 0 => string 'zlib.*' (length=6) 1 => string 'bzip2.*' (length=7) 2 => string 'convert.iconv.*' (length=15) 3 => string ' string.rotl3' (length=12) 4 => string 'string.toupper' (length=14) 5 => string 'string.tolower' (length=14) 6 => string 'string.strip_tags' (length=17) 7 => string 'convert.*' (length=9) 8 => string 'consumed' (length=8) 9 => string 'dechunk' (length=7) 

рд╡реЗ рдЖрдкрдХреЛ рд╕рд╛рдордЧреНрд░реА рдХреЛ "рдЬрд╝рд┐рдк" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдКрдкрд░реА рдпрд╛ рдирд┐рдЪрд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВред

рдореБрдЦреНрдп рдЪрд╛рд▓реЗрдВ рдЬреЛ рдореИрдВ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЦрддреНрдо рд╣реЛ рдЧрдИ рд╣реИрдВред рдЪрд▓рд┐рдП рдЕрдм рдореИрдВ рдЬреЛ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реВрдВ - рдкрд╣рд▓реВ-рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧред

рдЯреНрд░рд┐рдХ # 7 рдкрд╣рд▓реВ рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ


рдЗрд╕ рдХреЛрдб рдХреЛ рджреЗрдЦреЗрдВ рдФрд░ рд╕реЛрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдпрд╛ рдмреБрд░рд╛ рд╣реИред



рдХреЛрдб рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рдПрдХреНрд╕реЗрд╕ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рд▓реЙрдЧрд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рддрд╛ рд╣реИ, рдмрдиреА рд░рд╣рддреА рд╣реИ, exception рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ exception ред

рдпрджрд┐ рдЖрдк рдЗрд╕ рд╕рднреА рдиреВрдбрд▓реНрд╕ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╣рдорд╛рд░реЗ рдкреНрд░рддреНрдпреЗрдХ рддрд░реАрдХреЗ рдореЗрдВ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рдореВрд▓реНрдпрд╡рд╛рди рдЪреАрдЬ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╣рд░реЗ рд░рдВрдЧ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рд╣реИред



рдмрд╛рдХреА рд╕рдм рдХреБрдЫ: "рдорд╛рдзреНрдпрдорд┐рдХ рдЪрд┐рдВрддрд╛рдПрдВ" рдпрд╛ "рдХреНрд░реЙрд╕рдХрдЯрд┐рдВрдЧ рдЪрд┐рдВрддрд╛рдПрдВ" рдХреНрд░реЙрд╕-рдХрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИред

рдкрд╛рд░рдВрдкрд░рд┐рдХ рдУрдУрдкреА рдЗрди рд╕рднреА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдХреЙрдкреА рдХрд░рдирд╛, рдЙрдиреНрд╣реЗрдВ рдирд┐рдХрд╛рд▓рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрд╣реАрдВ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдмреБрд░рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рджреЛрд╣рд░рд╛рдирд╛ рд╣реИред рдХрд╛рд╢ рдХреЛрдб рд╣рдореЗрд╢рд╛ рд╕рд╛рдл рдФрд░ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рджрд┐рдЦреЗред



рддрд╛рдХрд┐ рдЗрд╕рдореЗрдВ рд▓реЙрдЧрд┐рдВрдЧ рди рд╣реЛ (рдЗрд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП) рдФрд░ рдЗрд╕рдореЗрдВ security рдирд╣реАрдВ рд╣реИред



рддрд╛рдХрд┐ рд▓реЙрдЧрд┐рдВрдЧ рд╕рд╣рд┐рдд рд╕рднреА ...



... рдФрд░ рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдВрдЪ, ...



... рд╕реНрд╡рдпрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдФрд░ рдпрд╣ рд╕рдВрднрд╡ рд╣реИред

рд╢рдмреНрджрд╛рд╡рд▓реА "рдкрд╣рд▓реВ"


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



$invocation рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдмрдВрдж рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред



рдпрд╣ reflection рд╡рд┐рдзрд┐ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЖрд╡рд░рдг рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЕрдзрд┐рдХ рддрд░реНрдХ рд╣реЛрддреЗ рд╣реИрдВред

рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдЖрдЧреЗ, рдЖрдк рдЖрд╡рд╢реНрдпрдХ рдПрдХреНрд╕реЗрд╕ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ "рд╕рд▓рд╛рд╣" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред



рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреА рднрд╛рд╖рд╛ рдХрд╣рддреЗ рд╣реИрдВ: "рдкреНрд░рд┐рдп PHP, рдХреГрдкрдпрд╛ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд╣рд░ рдХреЙрд▓ рд╕реЗ рдкрд╣рд▓реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рдзрд┐ рд╕реЗ UserService рд╡рд░реНрдЧ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ UserService " рдмрд╕ рдПрдХ рдкрдВрдХреНрддрд┐, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреАред

рдкрд╣рд▓реВ рдмрдирд╛рдо рдШрдЯрдирд╛ рд╢реНрд░реЛрддрд╛


рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реВ рдХреА рддреБрд▓рдирд╛ рдХреАред рд╕рд┐рдореНрдлрдиреА рдореЗрдВ рдХрдИ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╡реЗрдВрдЯ рдбрд┐рд╕реНрдкреИрдЪрд░ рдХреНрдпрд╛ рд╣реИред



рд╡реЗ рд╕рдорд╛рди рд╣реИрдВ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ AutorizationChecker , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, AutorizationChecker , рдФрд░ рдпрд╣ рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╣рд╛рдВ рдЖрд╡реЗрджрди рдХрд░рдирд╛ рд╣реИред рд╢реНрд░реЛрддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ SubscrabingEvent рдирд╛рдордХ рдПрдХ SubscrabingEvent , рдФрд░ Aspect рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ Aspect рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗрд╡рд╛ рд╕реЗ рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред callback : - .

, .

, , Aspects .



. , PHP- .



, . , , OPcache.

. Composer . Go! AOP, Composer , .



Aspects , Aspects . .

.

PHP-Parser . , , . , , PHP-Parser . .



. , goaop/parser-reflection .



AST- , . , , , .

.



, , Aspect .



, .



, , . тАФ , - , .



, . , .

Aspect MOCK. ┬л┬╗, , . .

тАФ joinPoint . - joinPoint : , , .

рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ?


.

OPcache preloading for AOP Core . AOP- . 10 . Bootstrapping , PHP.

FFI integration to modify binary opcodes . , , . PHP-opcodes, .bin . FFI .

Modifying PHP engine internal callbacks PHP- userland. PHP . FFI PHP userland, , , . .

, .

#8. goaop/framework


, GitHub .

 composer show goaop/framework --all name : goaop/framework descrip. : Framework for aspect-oriented programming in PHP. keywords : php, aop, library, aspect versions : dev-master, 3.0.x-dev, 2.x-dev, 2.3.1, тАж type : library license : MIT License 

, PhpStorm.



, Pointcuts. , , . тАФ , , .

Trick #9.


. , .

: , - . fastcgi_finish_request . , , , - callback тАФ .

?

, Deffered , , .



Aspect , , , Deffered , .



Aspect : , , , callback, , callback. .

React , promise . , - , - , .

, .



shutdown_function Aspect . , callback, , , , callback onPhpTerminate . fastcgi_finish_request : ┬л, , , , ┬╗. .

, sendPushNotification .



, - тАФ 2 .



, , , 2 .

, Deferred .



, . - , , .

рд╡рд╣ рд╕рдм рд╣реИред , - . , .

PHP Russia 2020 . тАФ . telegram- , PHP Russia 2020.

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


All Articles