рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреНрдп рдУрдУрдкреА рднрд╛рд╖рд╛рдУрдВ рдХреА рддрд░рд╣ php рдореЗрдВ, рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рд╣реИрдВред рдпреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ, рд╕рдВрд░рдХреНрд╖рд┐рдд рдФрд░ рдирд┐рдЬреА рдХреАрд╡рд░реНрдб рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЧреБрдгреЛрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ рдпрд╛ рд╕реНрдерд┐рд░рд╛рдВрдХ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдпреЗ рд╕рдВрд╢реЛрдзрдХ рдбреЗрдЯрд╛ рдХреЛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдирд┐рдХрдЯрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛, рд╕реА #, рдЧреЛ ( https://golang.org/doc/go1.4#internalpackages ), рдорд╛рдгрд┐рдХ ( https://habr.com/post/419969/ ), рдХреНрд░рд┐рд╕реНрдЯрд▓ ( https ) рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ : //crystal-lang.org/reference/syntax_and_semantics/visibility.html ) рдкреИрдХреЗрдЬреЛрдВ (рд╡рд░реНрдЧреЛрдВ) рдпрд╛ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред Php рдореЗрдВ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЧреБрдВрдЬрд╛рдЗрд╢ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ - рдХреЛрдИ рднреА рдЬреБрдбрд╝рд╛ рд╡рд░реНрдЧ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ рд╕реЗ рд╕реБрд▓рдн рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рдХрдИ рддрд░рдХреАрдмреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХреНтАНрдпреЛрдВ рдХрдХреНрд╖рд╛ рд╕реНтАНрддрд░ рдХреА рдЫрд┐рдкрд╛рдИ рдХреА рдЖрд╡рд╢реНтАНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ:
- рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рд╕реЗрд╡рд╛ рдХрдХреНрд╖рд╛рдПрдВ (рд╕рд╣рд╛рдпрдХ) - рдЕрд░реНрдерд╣реАрди рдЖрдВрддрд░рд┐рдХ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдкреАрдЖрдИ рдХреЛ рдХреВрдбрд╝реЗ рдореЗрдВ рди рдбрд╛рд▓реЗрдВред
- рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ" рдХреА рдЖрдВрддрд░рд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЫрд┐рдкрд╛рд╡ рдХреЗ рд╕рд╛рде рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди, рдПрдХ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд░реНрдЧ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдП рдЖрд╢реНрд░рд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреА рдкреНрд░рддреНрдпрдХреНрд╖ рдкреАрдврд╝реА рдХрд╛ рдирд┐рд╖реЗрдзред
рдЕрд▓рдЧ-рдЕрд▓рдЧ, рд╣рдо "рдмрдбрд╝реЗ" рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╡рд┐рднрд╛рдЬрди рдХреЛ рдЫреЛрдЯреА рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рднреЗрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реНрдпрдХреНрддрд┐рдЧрдд рддрд░реАрдХреЛрдВ рдФрд░ рд╡рд░реНрдЧреЛрдВ рджреЛрдиреЛрдВ рдХреА рдЬрдЯрд┐рд▓рддрд╛ (рдФрд░ рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛) рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред рдпрд╣рд╛рдБ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЙрди рдорд╛рд░реНрдХрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рддреА рд╣реИ рдЬреЛ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рдпрд╛ рд╡рд░реНрдЧ рд╕реНрд╡рдпрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд▓реЗрддрд╛ рд╣реИред рдЬрдм рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рджрд┐рдЦрд╛рдирд╛, рд╣рдо рдЗрд╕рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдирд┐рдЬреА \ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЬрдм рдПрдХ рдХрд╛рд░рдг рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдмрдврд╝рддрд╛ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдЗрдХрд╛рдИ рд╕реЗ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпреЗ рдмрд╣реБрдд рд╣реА рдирд┐рдЬреА \ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрдХреНрд╖рд╛рдПрдВ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╣рдо рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдЙрди рддрд░реАрдХреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдЦреЛрд▓рддреЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рджрд╛рдпрд░реЗ рддрдХ рд╕реАрдорд┐рдд рдереЗред
рдЕрдм рдХрд╡рд░ рдЕрдк рдХреЗ рдЕрдиреБрдХрд░рдг рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд░реАрдХреЗред
PHPDoc рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдПрдХ рд╡рд░реНрдЧ, рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ internal
( http://docs.phpdoc.org/references/phpdoc/tags/internal.html ) рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреБрдЫ IDE (рдЬреИрд╕реЗ рдХрд┐ PhpStorm) рдРрд╕реЗ рд▓реЗрдмрд▓ рдХреЛ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВред
рд░рдирдЯрд╛рдЗрдо рдореЗрдВ, рдЖрдк рдЬрд╛рдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХрд╣рд╛рдБ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, debug_backtrace
рд╡рд┐рдзрд┐ ( http://php.net/manual/ru/function.debug-backtrace.php ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ dev \ test рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХреЛрдб рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди Xdebug рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдПрдХ рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдБ рд╣реИ ( https://coderwall.com/p/ixvnga/how-emulates-pStreet-class-concept-in-php )ред
debug_backtrace рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ final class PrivateClass { private $allowedConsumer = 'AllowedPrivateClassConsumer'; public function __construct() { $builder = debug_backtrace(); if (count($builder) < 2 || !isset($builder[1]['class']) || $builder[1]['class'] !== $this->allowedConsumer) { throw new Exception('Need to be instantiated by '.$this->allowedConsumer); } } }
рдЕрдирд╛рдо рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
Php рдореЗрдВ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЕрдирд╛рдо рдХрдХреНрд╖рд╛рдПрдВ ( http://php.net/manual/ru/language.oop5.anonymous.php ) рд╣реИред рд╕рдВрд░рдХреНрд╖рд┐рдд рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдЕрдирд╛рдо рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕реЗ рдЫрд┐рдкрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╡рд░реНрдЧ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рдЧрдбрд╝рдмрдбрд╝реА рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк "рдирд┐рдЬреА" рд╡рд░реНрдЧ рдХреЛ рд╕рд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрдирд╛рдо рд╡рд░реНрдЧ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рд▓рд┐рдВрдХ ( https://markbakeruk.net/2018/06/25/use-php-anonymous-classes-as-package-pStreet-classes/ ) рдкрд░ рд╣реИред
рдорд┐рд▓реА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЫрд┐рдкрдиреЗ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдорд╛рдВрдЧ рдХреА рдЬрд╛рддреА рд╣реИ (рдФрд░ рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ), рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдмрд╣реБрдд рд╕реАрдорд┐рдд рд╣реИ, рд╕рдВрднрд╡рддрдГ рд╡рд┐рднрд┐рдиреНрди "рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ" рдореЗрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг, рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ред рдЬреЛ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдмрд▓реНрдХрд┐ рдпрд╣ рдЕрдЬреАрдм рд╣реИ, рдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЖрдВрддрд░рд┐рдХ рддрд░реАрдХреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдкрд░ рдЬреЛрд░ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рдЧрднрдЧ рдХреЛрдИ рднреА рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрдХреНрд╖рд╛рдУрдВ рдпрд╛ рдбреЛрдореЗрди рдбреЛрдореЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдб рдХреЗ рдмрдбрд╝реЗ рддрд╛рд░реНрдХрд┐рдХ рдЯреБрдХрдбрд╝реЗ рд╡реИрд╢реНрд╡рд┐рдХ рджреГрд╢реНрдпрддрд╛ рд╕реНрдерд╛рди рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВред