On 3/12/2017 2:49 PM, Michael Vostrikov wrote: > 2017-03-12 15:35 GMT+05:00 Fleshgrinder <p...@fleshgrinder.com>: >> `IncompleteOrder` is the one without date, address, and >> probably even products. You directly named it as such. Then you have >> `ProcessableOrder` where this is impossible > > Yes, this is Order and OrderForCheckout in my example. But they should not > be descendants of base class or each other. Because allowed class states > are not descendants of that class. > >> **BAM** all problems solved. > > Yeah, now we have: > base Order > IncompleteOrder extends Order > ProcessableOrder extends Order > PaidOrder extends Order // or ProcessableOrder? > > and later could get: > WholesaleOrder extends Order > > with a question how to extend classes in new branch. > > > Also the problem is how to use this tree in relations. > > There is class OrderItem with $order property. > There is class Customer with $orders property. > What classes should have these properties? Every time different? > > This is a part of another problem that we need to decide what exact class > should be created here or there before calling a function which uses it. > > > With type variants (hm, or invariants) it could be: > Order > ProcessableOrder variant of Order > PaidOrder variant of Order > WholesaleOrder variant of Order > > And everywhere we can create and use objects with class Order, and only in > some functions they will be considered as processable or not. >
Post this on Stackoverflow and I'll give you some answers and possible approaches. ;) You are clearly struggling with architecture and design, but you are definitely not missing language constructs here. -- Richard "Fleshgrinder" Fussenegger -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php