рдиреЗрд╕реНрдЯреЗрдб рдПрд░реЗрд╕ рдФрд░ рдореИрдЬрд┐рдХ рдореЗрдердбреНрд╕

рд╢рд╛рдпрдж рд╣рд░ рдХреЛрдИ PHP рдореЗрдВ рдЬрд╛рджреВ (рдЬрд╛рджреВ) рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ __get рдФрд░ __set рддрд░реАрдХреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдЕрдкреНрд░рд┐рдп рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рдиреЗрд╕реНрдЯреЗрдб рд╕рд░рдгреА рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рд╣реИред


рдЗрд╕ рд╡рд░реНрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
рдХрдХреНрд╖рд╛ MyClass {
рд╕рдВрд░рдХреНрд╖рд┐рдд $ рдбреЗрдЯрд╛ = рд╕рд░рдгреА ( 'рдХреБрдЫ' => рд╕рд░рдгреА ( 'рдЙрдк' => 'рдбреЗрдЯрд╛' ) ) ;

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдорд╛рд░реЛрд╣ __set ( $ рдирд╛рдо , $ рдореВрд▓реНрдп ) {
$ рдпрд╣ -> рдбреЗрдЯрд╛ [ $ рдирд╛рдо ] = $ рдореВрд▓реНрдп ;
}
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдорд╛рд░реЛрд╣ __get ( $ рдирд╛рдо ) {
$ рдпрд╣ рд▓реМрдЯрд╛рдПрдБ -> рдбреЗрдЯрд╛ [ $ рдирд╛рдо ] ;
}
}


рдпрджрд┐ рдЖрдк рдЗрд╕ рддрд░рд╣ $ рдбреЗрдЯрд╛ рд╕рд░рдгреА рдХреЗ рдХреБрдЫ рдХреБрдВрдЬреА рдХреЗ рдЙрдк рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:

$ рдореЗрд░рд╛ = рдирдпрд╛ MyClass ( ) ;

$ рдореЗрд░рд╛ -> рдХреБрдЫ [ 'рдЙрдк' ] = 'рдкрд░реАрдХреНрд╖рдг' ; // рдорд╛рди рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ

рдЧреВрдВрдЬ $ рдореЗрд░реА -> рдХреБрдЫ [ 'рдЙрдк' ] ; // рдкреНрд░рд┐рдВрдЯ 'рдбреЗрдЯрд╛'


рдиреЛрдЯрд┐рд╕ рдЖрдПрдЧрд╛:
рд╕реВрдЪрдирд╛: рдУрд╡рд░рд▓реЛрдб рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд╕рдВрд╢реЛрдзрди MyClass :: $ рдХреБрдЫ рдХрд╛ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИ


рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдФрд░ рд╡рд░реНрдЧ рд▓рд┐рдЦреЗрдВрдЧреЗ (рдореИрдВрдиреЗ рдЗрд╕реЗ ActiveArray рдХрд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЗрд░реЗ ActiveRecord рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ):

рдХрдХреНрд╖рд╛ ActiveArray {
рд╕рдВрд░рдХреНрд╖рд┐рдд $ рд╕рд░рдгреА ;

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдорд╛рд░реЛрд╣ __construct ( $ рд╕рд░рдгреА ) {
$ рдпрд╣ -> рд╕рд░рдгреА = & $ рд╕рд░рдгреА ;
}

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдорд╛рд░реЛрд╣ __set ( $ рдирд╛рдо , $ рдореВрд▓реНрдп ) {
$ рдпрд╣ -> рд╕рд░рдгреА [ $ рдирд╛рдо ] = $ рдореВрд▓реНрдп ;
}

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдорд╛рд░реЛрд╣ __get ( $ рдирд╛рдо ) {
рдЕрдЧрд░ ( is_array ( рдпрд╣ $ -> рд╕рд░рдгреА [ $ рдирд╛рдо ] ) )
рдирдпрд╛ рд╕реНрд╡рдкрди рд▓реМрдЯрд╛рдПрдБ ( рдФрд░ $ рдпрд╣ -> рд╕рд░рдгреА [ $ рдирд╛рдо ] ) ;
рдЕрдиреНрдпрдерд╛
$ рдпрд╣ рд▓реМрдЯрд╛рдПрдБ -> рд╕рд░рдгреА [ $ рдирд╛рдо ] ;
}
}


рдФрд░ MyClass рд╡рд░реНрдЧ рдХреА __get рд╡рд┐рдзрд┐ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ:
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдорд╛рд░реЛрд╣ __get ( $ рдирд╛рдо ) {
рдЕрдЧрд░ ( is_array ( рдпрд╣ $ -> рдбреЗрдЯрд╛ [ $ рдирд╛рдо ] ) )
рдирдП ActiveArray рдХреЛ рд╡рд╛рдкрд╕ рдХрд░реЗрдВ ( рдФрд░ $ рдпрд╣ -> рдбреЗрдЯрд╛ [ $ рдирд╛рдо ] ) ;
рдЕрдиреНрдпрдерд╛
$ рдпрд╣ рд▓реМрдЯрд╛рдПрдБ -> рдбреЗрдЯрд╛ [ $ рдирд╛рдо ] ;
}


рдЕрдм рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдиреЗрд╕реНрдЯреЗрдб рдПрд░реЗрдЬрд╝ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
$ рдореЗрд░рд╛ -> рдХреБрдЫ -> рдЙрдк = 'рдкрд░реАрдХреНрд╖рдг' ;
рдЧреВрдВрдЬ $ рдореЗрд░реА -> рдХреБрдЫ -> рдЙрдк ; // рдкреНрд░рд┐рдВрдЯ 'рдкрд░реАрдХреНрд╖рдг'

$ рдореЗрд░реА -> рдХреБрдЫ = рд╕рд░рдгреА ( 'рдПрдмреАрд╕реА' => 123 ) ;
рдЧреВрдВрдЬ $ рдореЗрд░реА -> рдХреБрдЫ -> рдПрдмреАрд╕реА ; // '123' рдХреЛ рдкреНрд░реЛрдбреНрдпреВрд╕ рдХрд░реЗрдЧрд╛


рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

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


All Articles