рдЕрд╢рдХреНрдд рдореВрд▓реНрдп, рдЬрдм рдмрд┐рдирд╛ рд╕реЛрдЪреЗ рд╕рдордЭреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рдЬреАрд╡рди рдХреЛ рдЕрд╕рд╣рдиреАрдп рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдк рдпрд╣ рднреА рдирд╣реАрдВ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рджрд░реНрдж рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдордЭрд╛рдиреЗ рдХреАред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди
рд╣рдо рд╕рднреА рдиреЗ рдПрдХ рд╡рд┐рдзрд┐ рджреЗрдЦреА рдЬреЛ рдХрдИ рддрд░реНрдХ рджреЗрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдЖрдзреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдо рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
public function insertDiscount( string $name, int $amountInCents, bool $isActive = true, string $description = '', int $productIdConstraint = null, DateTimeImmutable $startDateConstraint = null, DateTimeImmutable $endDateConstraint = null, int $paymentMethodConstraint = null ): int
рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдПрдХ рдЫреВрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╣рд░ рдЬрдЧрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдмрдирд╛рддреЗ рд╕рдордп рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрддреНрдкрд╛рджреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдкрд░ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рднреБрдЧрддрд╛рди рд╡рд┐рдзрд┐ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рднреБрдЧрддрд╛рди рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЫреВрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
insertDiscount('Discount name', 100, true, '', null, null, null, 5);
рдпрд╣ рдХреЛрдб рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдмреЗрд╣рдж рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЖрд╡реЗрджрди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЗрдП рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рддрд░реНрдХ рд╕реЗ рд╕рдордЭрддреЗ рд╣реИрдВред
рд╡реИрдз рдЫреВрдЯ рдХреНрдпрд╛ рд╣реИ?
рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдкрддрд╛ рд▓рдЧрд╛ рдЪреБрдХреЗ рд╣реИрдВ рдХрд┐ рдЕрд╕реАрдорд┐рдд рдЫреВрдЯ рд╣рд░ рдЬрдЧрд╣ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рд╡реИрдз рдЫреВрдЯ рдореЗрдВ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╣рдо рдмрд╛рдж рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рддрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╕рдЪ рдХрд╛ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореВрд▓реНрдп рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╡рд┐рдзрд┐ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
insertDiscount('Discount name', 100);
рдмрд╕ рдХреЛрдб рдХреЛ рдкрдврд╝рдХрд░, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдЫреВрдЯ рддреБрд░рдВрдд рд╕рдХреНрд░рд┐рдп рд╣реЛрдЧреАред рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред
рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдХреЛрдб рдХреА 200 рд▓рд╛рдЗрдиреЗрдВ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рдЖрдк рдЫрд┐рдкреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреА рдЧрдИ рд╡рд┐рдзрд┐ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдореИрдВ рдХреБрдЫ рднреА рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рдирд╛ рдХреЛрдб рдХреЛ рдкрдврд╝реВрдВрдЧрд╛ред
рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рд╡рд╣реА рдЬрд╛рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдХ рд░рд┐рдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ - рдпрд╣ рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рдХрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рд╡рд┐рд╡рд░рдг рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдЪреЗрдХ рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдпрд╣ рдЦрд╛рд▓реА рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗрд╡рд▓ рд░рд╛рд╢рд┐ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рд▓рд╛рдЗрди рджреЗрдЦрддрд╛ рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдЗрд╕ рддрд░рд╣ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреВрдВрдЧрд╛:
public function insertDiscount( string $name, string $description, int $amountInCents, bool $isActive ): int
рдореИрдВрдиреЗ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдмрд╛рдж рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЪреВрдВрдХрд┐ рд╕рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдм рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рдХреНрд░рдо рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдирд╛рдо рдХреЗ рдареАрдХ рдмрд╛рдж рд╡рд┐рд╡рд░рдг рд░рдЦрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рд╕ рд╣реЛрдиреЗ рдкрд░ рдХреЛрдб рдмреЗрд╣рддрд░ рдкрдврд╝рддрд╛ рд╣реИред
insertDiscount( 'Discount name', 'Discount description', 100, Discount::STATUS_ACTIVE );
рдореИрдВрдиреЗ рдЫреВрдЯ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЕрдм рдЖрдкрдХреЛ рдЗрд╕ рддрд░реНрдХ рдХреЗ рд╕рд╣реА рдорд╛рдпрдиреЗ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ: рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рд╕рдХреНрд░рд┐рдп рдЫреВрдЯ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╣рдо рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдФрд░ рдмреЗрд╣рддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╕реНрдкреЙрдЗрд▓рд░: рдореВрд▓реНрдп рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред
рдЕрдбрд╝рдЪрдиреЗрдВ рдЬреЛрдбрд╝рдирд╛
рдЕрдм рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рддрд┐рдмрдВрдз рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╢реВрдиреНрдп, рд╢реВрдиреНрдп, рд╢реВрдиреНрдп рдирд░рдХ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрд▓рдЧ рддрд░реАрдХреЗ рдмрдирд╛рдПрдВрдЧреЗред
public function addProductConstraint( Discount $discount, int $productId ): Discount; public function addDateConstraint( Discount $discount, DateTimeImmutable $startDate, DateTimeImmutable $endDate ): Discount; public function addPaymentMethodConstraint( Discount $discount, int $paymentMethod ): Discount;
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рд╣рдо рдХреБрдЫ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рдЫреВрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░реЗрдВрдЧреЗ:
$discountId = insertDiscount( 'Discount name', 'Discount description', 100, Discount::STATUS_ACTIVE ); addPaymentMethodConstraint( $discountId, PaymentMethod::CREDIT_CARD );
рдЕрдм рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдореВрд▓ рдХреЙрд▓ рд╕реЗ рдХрд░реЗрдВред рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдкрдврд╝рдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рдЧрдпрд╛ рд╣реИред
рд╡рд╕реНрддреБ рдЧреБрдгреЛрдВ рдореЗрдВ рдЕрд╢рдХреНрдд
рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдг рдореЗрдВ рд╢реВрдиреНрдп рдХрд╛ рд╕рдорд╛рдзрд╛рди рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛ рдХрд┐ рдореИрдВ рдХрд┐рддрдиреА рдмрд╛рд░ рдРрд╕реА рдЪреАрдЬреЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ:
$currencyCode = strtolower( $record->currencyCode );
Buuum! "рд╕реНрдЯреНрд░реЗрдЯреЛрд▓реЙрд╡рд░ рдХреЗ рд▓рд┐рдП рдЕрд╢рдХреНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред" рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ рдбреЗрд╡рд▓рдкрд░ рднреВрд▓ рдЧрдпрд╛ рдХрд┐ рдХрд░реЗрдВрд╕реА рдХреЛрдб рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрднреА рднреА рдЖрдИрдбреАрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдЙрдирдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рджрдмрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрдИ рд╡рд░реНрд╖реЛрдВ рддрдХ рдХрд┐рд╕реА рдХрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддреНрд░реБрдЯрд┐ рдХреБрдЫ рдЕрдкрдард┐рдд рд▓реЙрдЧ рдореЗрдВ рд░реЛрд▓ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧреА, рдФрд░ рдЧреНрд░рд╛рд╣рдХ рд╕рдордп-рд╕рдордп рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдХрд┐ рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдЗрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рднреА рдЗрд╕ рдХреЛрдб рдХреА рд▓рд╛рдЗрди рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рд╣рдо рдЬрд╣рд╛рдВ рднреА рдХрд░реЗрдВрд╕реА рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрд╢рдХреНрдд рдЪреЗрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╣рдо рдПрдХ рдЕрд▓рдЧ рддрд░рд╣ рдХреЗ рдирд░рдХ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ:
if ($record->currencyCode === null) { throw new \RuntimeException('Currency code cannot be null'); } if ($record->amount === null) { throw new \RuntimeException('Amount cannot be null'); } if ($record->amount > 0) { throw new \RuntimeException('Amount must be a positive value'); }
рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдордЭ рдЪреБрдХреЗ рд╣реИрдВ, рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рдЕрдкрдиреА рд╡рд┐рдзрд┐ рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдЕрдм рд╣рд░ рдЬрдЧрд╣ рдЗрд╕ рдкрд░реАрдХреНрд╖рд╛ рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдПрдХ рдФрд░ рдЕрд╢рдХреНрдд рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреА рджреВрд╕рд░реА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ! рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рд╕рд░рд▓ рдЙрдкрд╛рдп рд╣реИ: рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдореВрд▓реНрдпред
рдореВрд▓реНрдп рд╡рд╕реНрддреБрдУрдВ
рдореВрд▓реНрдп рд╡рд╕реНрддреБрдПрдВ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд▓реЗрдХрд┐рди рд╕рд░рд▓ рдЪреАрдЬреЗрдВ рд╣реИрдВред рдЬрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рдо рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рдереЗ, рд╡рд╣ рдпрд╣ рдереА рдХрд┐ рд╣рдорд╛рд░реА рд╕рднреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдорд╛рдиреНрдп рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХреНрдпрд╛ рд╡рд╕реНрддреБ рдХреЗ рдЧреБрдгреЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдХреНрдпрд╛ рд╡реЗ рд╡реИрдз рд╣реИрдВред рдЕрдЧрд░ рд╣рдо рдХрд░ рд╕рдХреЗ рддреЛ рдХреНрдпрд╛?
рдореВрд▓реНрдпреЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рджреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рдЙрдиреНрд╣реЗрдВ рдорд╛рдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╡рд░реНрдЧ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
final class Amount { private $amountInCents; private $currencyCode; public function __construct(int $amountInCents, string $currencyCode): self { Assert::that($amountInCents)->greaterThan(0); $this->amountInCents = $amountInCents; $this->currencyCode = $currencyCode; } public function getAmountInCents(): int { return $this->amountInCents; } public function getCurrencyCode(): string { return $this->currencyCode; } }
рдореИрдВ beberlei / рдореБрдЦрд░ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЬрдм рднреА рдЪреЗрдХ рдлреЗрд▓ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИред рдпрд╣ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдЕрд╢рдХреНрдд рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рд╣рдордиреЗ рдЪреЗрдХ рдХреЛ рдЗрд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рд╣рдо рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЧрд╛рд░рдВрдЯреА рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рдХрд╛рд░ рднреА рд╕рд╣реА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо strtolower рдХреЗ рд▓рд┐рдП рдЗрдВрдЯ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдпрджрд┐ рдЖрдк PHP рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ -> рдкреВрд░реНрдгрд╛рдВрдХ () рдФрд░ -> рд╕реНрдЯреНрд░рд┐рдВрдЧ () рдХреЗ рд╕рд╛рде рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдорд╛рди рдирд╣реАрдВ рдмрджрд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдЧреЗрдЯрд░реНрд╕ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдмрд╕рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдкреНрд░рддрд┐рд░рдХреНрд╖рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╛рдЗрдирд▓ рдЬреЛрдбрд╝рдирд╛ рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдмрд╕рдиреЗ рдпрд╛ рдЬрд╛рджреВ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд░рд╛рд╢рд┐ $ рд░рд╛рд╢рд┐ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк 100% рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХреЗ рд╕рднреА рдЧреБрдг рдорд╛рдиреНрдп рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдпрджрд┐ рдорд╛рди рдорд╛рдиреНрдп рдирд╣реАрдВ рдереЗ, рддреЛ рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдмрдирд╛ рдкрд╛рдПрдВрдЧреЗред
рдЕрдм рдореВрд▓реНрдп рд╡рд╕реНрддреБрдУрдВ рдХреА рдорджрдж рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдФрд░ рдмреЗрд╣рддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
$discount = new Discount( 'Discount name', 'Discount description', new Amount(100, 'CAD'), Discount::STATUS_ACTIVE ) insertDiscount($discount);
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рдПрдХ рдбрд┐рд╕реНрдХрд╛рдЙрдВрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдВрджрд░ рд╣рдо рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд╛рд╢рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдЗрд╕ рдкреВрд░реЗ рдмреНрд▓реЙрдХ рдХреЛрдб рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рдорд╛рдиреНрдп рдбрд┐рд╕реНрдХрд╛рдЙрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИред
рдЬреАрд░реЛ рд╣реЙрд░рд░ рд╕реНрдЯреЛрд░реА
рдЖрдЗрдП рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдорд╛рдорд▓реЗ рдХреЛ рджреЗрдЦреЗрдВ рдЬрд┐рд╕рдореЗрдВ рдЕрд╢рдХреНрдд рдПрдХ рдЖрд╡реЗрджрди рдореЗрдВ рд╣рд╛рдирд┐рдХрд╛рд░рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рдЪрд╛рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдФрд░ рдЗрд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред
$collection = $this->findBy(['key' => 'value']); $result = $this->filter($collection, $someFilterMethod); if ($result === null) { $result = $collection; }
рдпрджрд┐ рдкрд░рд┐рдгрд╛рдо рд╢реВрдиреНрдп рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдореВрд▓ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ? рдпрд╣ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддреА рд╣реИ рдпрджрд┐ рдЙрд╕реЗ рдЙрдкрдпреБрдХреНрдд рдорд╛рди рдирд╣реАрдВ рдорд┐рд▓реЗред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рд╕рдм рдХреБрдЫ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрдВрдЧреЗ рдФрд░ рд╕рднреА рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВрдЧреЗред рдЗрд╕рд╕реЗ рддрд░реНрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдореВрд▓ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рд╣рдореЗрдВ рдХрднреА рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдбреЗрд╡рд▓рдкрд░ рдХреА рдирд┐рд╢реНрдЪрд┐рдд рдзрд╛рд░рдгрд╛ рдереА рдХрд┐ рдЕрд╢рдХреНрдд рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЧрд▓рдд рдирд┐рдХрд▓рд╛ред
рдпрд╣ рдЕрд╢рдХреНрдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдирдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдЬрд╡рд╛рдм рджрд┐рдпрд╛ рдЬрд╛рдПред рдЧрд▓рддреА рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рджреВрд╕рд░реА рдУрд░, рдЕрдкрд╡рд╛рдж рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ:
try { $result = $this->filter($collection, $someFilterMethod); } catch (CollectionCannotBeEmpty $e) {
рдпрд╣ рдХреЛрдб рдЕрджреНрд╡рд┐рддреАрдп рд╣реИред рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдЗрд╕рдХреА рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред
рдХреНрдпрд╛ рдпрд╣ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ?
рдпрд╣ рд╕рдм рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдпрд╛рд╕ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдЬреЛ рд╕рдорд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рдБ, рдпрд╣ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЖрдк рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╕рдордп рдмрд┐рддрд╛рдПрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рдХрд╛рдлреА рдкреБрд░рд╕реНрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдШрдВрдЯреЗ рдЬреЛ рдореИрдВ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реВрдВ, рдореБрдЭреЗ рдЙрди рджрд┐рдиреЛрдВ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ рдЬрдм рдореБрдЭреЗ рдХреЛрдб рдмрджрд▓рдиреЗ рдпрд╛ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕реЗ рдЧрд╛рд░рдВрдЯреАрдХреГрдд рдЙрдЪреНрдЪ-рдЙрдкрдЬ рдирд┐рд╡реЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪреЗрдВред
рддреЛ рдореЗрд░реЗ рдирд▓ рдХрд╛ рдЯреАрд░ рдХрд╛ рдЕрдВрдд рдЖ рдЧрдпрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред