Req #49526 [Com]: C# style property get/set syntax
Edit report at https://bugs.php.net/bug.php?id=49526&edit=1
ID: 49526
Comment by: reeze@php.net
Reported by: president at basnetworks dot net
Summary: C# style property get/set syntax
Status: Open
Type: Feature/Change Request
Package: Scripting Engine problem
Operating System: *
PHP Version: *
Block user comment: N
Private report: N
New Comment:
@see https://wiki.php.net/rfc/propertygetsetsyntax-v1.2
this RFC failed to win the vote sadly.
Previous Comments:
------------------------------------------------------------------------
[2013-01-09 01:36:22] anka17pinky at yahoo dot com
I wish this request was implemented in PHP 5.5 :(
There are so many questions on SO asking for ways to implement readonly properties in PHP...
------------------------------------------------------------------------
[2012-01-28 01:45:53] phpdev at zerocue dot com
An "as implemented" document has been created here:
https://wiki.php.net/rfc/propertygetsetsyntax-as-implemented
Only thing remaining to be implemented is static accessors.
------------------------------------------------------------------------
[2010-10-28 00:48:47] rayro at gmx dot de
I also recommend this but i have a little idea too:
1. Most of the time i use get<VariableName>() syntax and I have to write new functions for
that (or using __call or __set), because i protect the properties with private or protected to
protect for writing them.
2. Most of all the code is ugly or has limitations using readonly/writeonly properties with
__get(&$v) or __set($v,&$c) by reference.
3. It is not perfectly clean to write less code with __get or getter/setter if only want to
protecting them... And less code matters!
I would like to see a new, or 2 new keywords, e.g. "readonly" and "writonly",
because the code will look smoother and i dont have to make the use of magic methods... Or some own
designed errors for that...
Now an simple example:
======================
<?php
class A
{
/** the following syntax is just invented **/
static readable protected $foo = 1;
static writable protected $bar = 2;
}
A::$foo++; // raises error "variable is not writeable from this context"
echo(A::$foo); // will simple echo $foo
A::$bar++; // will increment $bar to 3
echo(A::$bar); // raises error "variable is not readable from this context"
?>
( what about is_readable() or is_writable() for that? )
I dont think that these functions will be used, so only Reflection should be extended...
and now, instead of the current syntax:
======================================
<?php
class A
{
static protected $foo = 1;
static protected $bar = 1;
function __get($v) {
if ($v == 'bar') {
trigger_error('$bar is not readble from this context',E_USER_ERROR);
}
return $this->$v;
}
function __set($v, $c)
{
if ($v == 'foo') {
trigger_error('$foo is not writable from this context',E_USER_ERROR);
}
$this->$v = $c;
return true;
}
}
?>
get/set syntax will be nice but also nasty if only read/writablity is desired...
this can be confusing as this:
==============================
<?php
class A
{
/** the following syntax is just invented **/
static protected $foo {
function __get() {
return $this->foo;
}
function __set() {
trigger_error('$foo is not writable from this context',E_USER_ERROR);
}
} = 1;
static protected $bar {
function __get() {
trigger_error('$bar is not readable from this context',E_USER_ERROR);
}
function __set() {
$this->bar = 1;
return true;
}
} = 2;
}
?>
think about it... many developers will waive the old way or functions like getVarname and
setVarname... and for all other, getter/setter will be nice as described in the rfc...
------------------------------------------------------------------------
[2009-09-13 19:56:24] president at basnetworks dot net
For reference, the RFC for this feature request now exists at this URL:
http://wiki.php.net/rfc/propertygetsetsyntax
------------------------------------------------------------------------
[2009-09-13 04:24:08] president at basnetworks dot net
Hi Kalle,
Thanks for the information. I will follow your instructions and start working on the RFC over the
next week(s). Also, thanks for the link about the Developer Summit, but it does not show the
outcome of the discussion, am I able to find that anywhere?
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=49526
--
Edit this bug report at https://bugs.php.net/bug.php?id=49526&edit=1
Thread (10 messages)