Real properties in PHP

php.internals

Marian Kostadinov

21 years ago
I wrote about real properies a few days ago but no one seems to be interested in it. I think that it would be nice to have real properties present in PHP. I mean properties like those in C# but a little more flexible by allowing getter and setter to have different visibility. See sample code below: Sample code: --------------- class person { public $firstName, $lastName; public getter fullName { // may also have () return "{$this->firstName} {$this->lastName}"; } public setter fullName ($value) { // may also not have ($value) but a special var. list ($this->firstName, $this->lastName) = explode (' ', $value, 2); } } $p = new person; $p->fullName = "Foo bar"; echo $p->firstName . "\n"; echo $p->lastName . "\n"; echo $p->fullName . "\n"; Sample result: ---------------- Foo bar Foo bar

Christian Schneider

21 years ago
Marian Kostadinov wrote:
> public getter fullName { // may also have () > return "{$this->firstName} {$this->lastName}"; > } > > public setter fullName ($value) { // may also not have ($value) but > a special var. > list ($this->firstName, $this->lastName) = explode (' ', $value, 2); > }
This can be easily done with function __get($name) { $get = "get_$name"; return $this->$get(); } function __set($name, $value) { $set = "set_$name"; $this->$set($value); } in your base class (the function names are then get_fullName/set_fullName. - Chris

Marian Kostadinov

21 years ago
On 8/25/05, Christian Schneider <cschneid@cschneid.com> wrote:
> Marian Kostadinov wrote: > > public getter fullName { // may also have () > > return "{$this->firstName} {$this->lastName}"; > > } > > > > public setter fullName ($value) { // may also not have ($value) but > > a special var. > > list ($this->firstName, $this->lastName) = explode (' ', $value, 2); > > } > > This can be easily done with > > function __get($name) > { > $get = "get_$name"; > > return $this->$get(); > } > > function __set($name, $value) > { > $set = "set_$name"; > > $this->$set($value); > } > > in your base class (the function names are then get_fullName/set_fullName. > > - Chris >
I know this solutions but it does not solve the property visibility issues and good overloading rules like in common methods. Let's say you have about 6-7 suche proterties which you expect to overload and some of the are private e.t.c

Derick Rethans

21 years ago
On Thu, 25 Aug 2005, Christian Schneider wrote:
> This can be easily done with > > function __get($name) > { > $get = "get_$name"; > > return $this->$get(); > } > > function __set($name, $value) > { > $set = "set_$name"; > > $this->$set($value); > } > > in your base class (the function names are then get_fullName/set_fullName.
But that has plenty of problems, like I described here: http://news.php.net/php.internals/17491 Derick
-- Derick Rethans http://derickrethans.nl | http://ez.no | http://xdebug.org

Ron Korving

21 years ago
I very much like your idea and syntax. I come from a Delphi background (when it comes to properties) and I must say I like your solution. It's easy and effective. Yes, it can be done with __set() and __get(), but it sure is uglier when you have a wide and constant range of properties. +1 (with 0 karma anyway). Ron "Marian Kostadinov" <manchokapitancho@gmail.com> wrote in message news:bec76cf9050825032978cd308d@mail.gmail.com... I wrote about real properies a few days ago but no one seems to be interested in it. I think that it would be nice to have real properties present in PHP. I mean properties like those in C# but a little more flexible by allowing getter and setter to have different visibility. See sample code below: Sample code: --------------- class person { public $firstName, $lastName; public getter fullName { // may also have () return "{$this->firstName} {$this->lastName}"; } public setter fullName ($value) { // may also not have ($value) but a special var. list ($this->firstName, $this->lastName) = explode (' ', $value, 2); } } $p = new person; $p->fullName = "Foo bar"; echo $p->firstName . "\n"; echo $p->lastName . "\n"; echo $p->fullName . "\n"; Sample result: ---------------- Foo bar Foo bar