(Let me suggest an idea irrelevant. Sorry...)
The performance of getters is critical.
For me the best solution would be a new keyword, equivalent to a "var"
without write access from outside the class:
class TimePeriod {
*property* $Hours = 1;
public function setHours($h) {
$this->Hours = $h;
}
}
$myTP = new TimePeriod();
echo $myTP->Hours; // 1
$myTP->setHours(3);
echo $myTP->Hours; // 3
$myTP->Hours = 5; // KO. PHP error here
Le 08/10/2012 13:42, Clint Priest a écrit :
As an update, just ran some performance testing:
master
Cycles Direct Getter
__get
v1.4 @ 10/8/2012 1m .05s .21s
.20s
php 5.5.0-dev
Cycles Direct Getter
__get
v1.4 @ 10/8/2012 1m .04s n/a
.21s
Performance of property accessors was important to me as I'm sure it will be to
many, on one million cycles of a simple getter, it's <.01s difference.
Depending on the run it is sometimes exactly the same performance.
-----Original Message-----
From: Clint Priest [mailto:cpri...@zerocue.com]
Sent: Monday, October 08, 2012 6:53 AM
To: internals@lists.php.net
Subject: [PHP-DEV] [RFC] Propety Accessors v1.1
It's been a while since I posted any updates about this, a few individuals have
been asking about it privately and wanting me to get it
out the door for PHP 5.5 release. It's come a long way since the last time I
posted about it.
RFC Document: https://wiki.php.net/rfc/propertygetsetsyntax-as-implemented
Example Usage:
class TimePeriod {
private $Seconds = 3600;
public $Hours {
get { return $this->Seconds / 3600; }
set { $this->Seconds = $value; }
isset<http://www.php.net/isset> { return
isset<http://www.php.net/isset>($this->Seconds); }
unset<http://www.php.net/unset> {
unset<http://www.php.net/unset>($this->Seconds); }
}
}
Changes / Updates
* isset/unset accessor functions now implemented (object & static
context, auto implementations, etc)
* static accessor now fully functional
* Reference functionality validated, tests written
* All operators have been tested, tests written
* read-only and write-only keywords: Added explanation of reasons for
inclusion at the top of the appropriate RFC section
* Tested for speed, approaches or meets __get() speed.
Internally things have changed quite a bit
* cleaned up and simplified
* had been using 4 to 5 additional fn_flag slots, now down to two
(READ_ONLY and WRITE_ONLY)
* the automatic implementations now compiled internal php code, this
greatly simplified that part of the code and future proofed
it.
The code is available at the url below and is up to date with master, all tests
pass.
https://github.com/cpriest/php-src
I'd like to get this project wrapped up in time to make it to the 5.5 release,
only a few things remain to be completed/updated:
* Check on reflection code written prior to major changes (tests still
pass)
* Add a few more reflection functions that were requested
In total there are 79 tests for this new functionality, if there are any others
that I have missed, please let me know.
-Clint