Hi, I see what you mean with static properties, that would be more difficult. I can answer on non-static however.
* When will $p2 be initialized, which properties can it access? - On class instantiation. It won't have access to $this, because the object won't have been created yet. It will have access to the same entities as a static method. * In B's constructor we're overwriting $p1, so $p2 will be initialized with the wrong value. - It won't have access to $this. In effect they are pre-constructor assignments, just like any other property. Concerning reassignment on constructor leading to wasted code, I can only place faith in the effectiveness of the user to override those properties to NULL. Anyway sorry about the mixed post. I've mainly been working on implementing generics, so I have a separate thread somewhere for that. Dominic On 25 Sep 2015 1:09 pm, "Johannes Schlüter" <johan...@schlueters.de> wrote: > Hi, > > Would be good to split complete different subjects to different threads > anyways: > > On Wed, 2015-09-23 at 15:53 +0100, Dominic Grostate wrote: > > the > > ability to set default values of properties to instances of objects or > > calls to static methods or functions (expressions in general). > > This causes questions on the order of execution and leads to waste of > CPU time in case the constructor overrides the default value while not > bringing much benefit over initialization in the constructor. It also is > complicated regarding exceptions being thrown. > > Take the following code: > > <?php > > foo(); > > class A { > protected $p1 = new Something(); > private $p2 = new SomethingElse($this->p1, $this->p3); > private $p3 = new Something(); > private static $s1 = new StaticSomething(); > > public function __construct() {} > } > > bar(); > > class B extends A { > private $p4 = new Something(); > > public function __construct() { > parent::__construct(); > $this->p1 = new Whatever(); > } > } > > baz(); > > try { > $b = new B(); > } catch (Exception $e) { > } > ?> > > Some Questions: > > * Where, relative to foo(), bar() and baz() will StaticSomething's > constructor be called? How do you capture exceptions from there? > * When will $p2 be initialized, which properties can it access? > (Only the ones initialized before? None?) > * In B's constructor we're overwriting $p1, so $p2 will be > initialized with the wrong value. > > I'm sure there are more questions ... doing this i the constructor makes > things clear and explicit with about the same amount of code to write. > > johannes > >