Am 08.08.2013 15:12 schrieb "Matthieu Napoli" <matth...@mnapoli.fr>: > > Le 08/08/2013 13:11, Martin Keckeis a écrit : > >> Am 08.08.2013 12:34 schrieb "Jordi Boggiano" <j.boggi...@seld.be>: >>> >>> >>> On 08.08.2013 10:34, Leigh wrote: >>>> >>>> I'm not sure what problem this is really trying to solve, the >> >> boilerplate >>>> >>>> code you mention is very explicit and it is very clear to the reader >> >> what >>>> >>>> is being done. Each property documented with its type, purpose and >>>> visibility in a common place for easy reference (at the top of the >> >> class). >>>> >>>> Each property that takes a value from the constructor assigned in the >>>> constructor. Very clear. >>> >>> >>> I for one am pretty tired of writing this boilerplate in every second >>> class I write. Using dependency injection you end up having to write a >>> LOT of those usually, and constructors typically only contain assignments. >>> >>> Adding a property means: declaring the property, adding the ctor arg, >>> adding the assignment in the ctor. You have to write the property name 4 >>> times. With this RFC in it'd come down to writing it once, and would >>> avoid having undeclared properties because someone forgot. >>> >>> I am very supportive the idea, although I see that it could be confusing >>> to some. Maybe the syntax needs to change, but the overall change is >>> much welcome. >> >> >> The syntax itself i feel is self explaining. You read it and you know whats >> going on. >> >> But somehow i feel this is "wrong". Declaring visibility directly in the >> arguments? This looks very scary to me. (Maybe only because i've never seen >> it before...) >> >> Other reasons against: >> Phpdoc generator break >> Code completion break >> If constructor is not at the beginning never see a var declaration >> Auto generation of set/get can be achieved with IDE..so its not much work > > > I second the feeling about the syntax, there are too many disadvantages. However the idea is excellent. > > Maybe an alternative approach could do, here is a random suggestion (a bit more verbose): > > class MyClass { > public $foo; > protected $bar; > > public function __construct($this->foo, $this->bar, $baz) { > // $this->foo and $this->bar are now set > $baz->doAnything(); // $baz is a standard parameter > } > } > > This would even be compatible with an interface: > > interface MyInterface { > function __construct($foo, $bar, $baz); > > }
Another thing which came into my mind: I normall create a set/get method also to a construct parameter to overwrite and unittest it... So then i cant use this, because i construct i also use the set mehod to be sure the var is assigned always the same (e.g. additional input check or exceptions)