Hi Piotrek On Sun, Apr 11, 2010 at 8:14 AM, Piotrek Karas <p.karas.li...@mediaself.pl> wrote: > Hello, > > I've got a few questions that may be a bit lame - hope it's OK. > > I'm writing a couple of PHP "components" internally for our purposes. > First I thought they would be just independent groups of classes, > nothing to it, but then I thought maybe following the eZComponents way > would be a good thing (especially for I will use or extend few of them). > So I dove into the implementation guidelines > (http://www.ezcomponents.org/contributing/coding_standards), most of > which is very clear and helpful. > > However, what I don't quite grasp is the distinction between internal > properties following traditional getXxx()/setXxx() pattern, and "just" > properties, for which the magic methods __get()/__set/__isset() are used > and which operate on $properties property. > > Could someone explain (or point to some deeper source): > > 1) What is/was the rationale behind this separation? I think I > understand technical consequences, but I fail to see the reasons... The > guidelines say: "The implementation of the properties happens in the > __set() and __get() magic methods to allow value bounds checking and > access control.". Wouldn't that be possible with traditional getters and > setters? I would be grateful for some example illustration here. > > 2) What method of deciding which would become an internal property and > which would become $properties[$name] would you recommend? Any golden > rule here? > > 3) Is there any way of making IDE to see/hint which $properties are > available or is it completely out of reach with this architecture? > > 4) Also, is this how inheritance is achieved with the $properties? > > <?php > class classWithFirstProperty > { > protected $properties = array(); > > public function __set( $name, $value ) > { > switch ( $name ) > { > case 'firstProperty': > $this->properties[$name] = (string) $value; > break; > > default: > throw new ezcBasePropertyNotFoundException( $name ); > break; > } > } > > public function __get( $name ) > { > switch ( $name ) > { > case 'firstProperty': > $this->properties[$name] = (string) $value; > break; > > default: > throw new ezcBasePropertyNotFoundException( $name ); > break; > } > } > } > > class classWithSecondProperty extends classWithFirstProperty > { > protected $properties = array(); > > public function __set( $name, $value ) > { > switch ( $name ) > { > case 'secondProperty': > $this->properties[$name] = (string) $value; > break; > > default: > parent::__set( $name, $value ); > break; > } > } > > public function __get( $name ) > { > switch ( $name ) > { > case 'secondProperty': > $this->properties[$name] = (string) $value; > break; > > default: > parent::__get( $name ); > break; > } > } > } > > $twoPropertyObject = new classWithSecondProperty(); > $twoPropertyObject->firstProperty = 123; > $twoPropertyObject->secondProperty = 456; > ?> > > Would that be correct? > > 5) Would you recommend to stick with eZC way? Why? Why not? > > > I would be grateful for any help or suggestions regarding these topics. > > Cheers, > Piotrek > -- > Components mailing list > Components@lists.ez.no > http://lists.ez.no/mailman/listinfo/components > >
Hi Piotrek To answer 3), there is a @property tag which is supported by most IDE's, See http://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_tags.property.pkg.html The other questions I leave to those more familiar with the eZ Components guidelines ;) Best regards Kristof -- Components mailing list Components@lists.ez.no http://lists.ez.no/mailman/listinfo/components