Decision::createFromId($uuid, $comment);
Decision::createFromMail($subject, $body);
Decision::createFromSome($a, $b, $c);
Decision::createFromAnother($a);
This doesn't look like constructors. It will be hard to read the
class, it will take time to come up with a name, it's not right. I
have different colors for functions and magic methods in my IDE,
__construct is always in focus.

new Decision($uuid, $comment);
new Decision($subject, $body);

This makes it much easier to quickly understand what is going on.

вт, 18 февр. 2025 г. в 11:03, Rowan Tommins [IMSoP] <imsop....@rwec.co.uk>:
>
>
>
> On 17 February 2025 14:39:42 GMT, Viktor Khramov <dev.999.vic...@gmail.com> 
> wrote:
> >Hi!
> >
> >The point is here:
> >https://gist.github.com/vhood/665418835e65be26d5a818fded92ab75
>
>
> >Static functions look awful and break the object's API.
>
> Personally, I think quite the opposite: named constructors make a lot more 
> sense than type-based overloads. For instance, you might have both 
> createFromJson and createFromYaml; their inputs are both going to be "string" 
> as far as the type system is concerned, so overloading would be useless.
>
> Swift gets around this using "argument labels" which is sort of like 
> requiring named arguments and despatching based on those names, but I believe 
> is actually derived from SmallTalk's multipart method names.
>
> Delphi is more explicit: a constructor is any class method marked with 
> "constructor" in its declaration, and the name "Create" is just a convention. 
> It does also support overloading on types, so other names are rarely used, 
> which is a shame.
>
> In your example, instead of this meaning different things based on what $a 
> happens to hold:
>
> $decision = new Decision($a, $b);
>
> You could write one of these to be clear:
>
> $decision = Decision::createFromId($a, $b);
> $decision = Decision::createFromMail($a, $b);
>
>
> Even if someone were to come up with a working implementation of overloading 
> in PHP's type system, I would probably oppose it, because I think it makes 
> code harder to read and reason about.
>
> Regards,
> Rowan Tommins
> [IMSoP]

Reply via email to