Re: CG(in_clone_method)
| From: | (Marcus B�rger) | Date: | Tue, 01 Jul 2003 23:32:27 +0000 |
| Subject: | Re: CG(in_clone_method) | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-3129@lists.php.net to get a copy of this message | ||
Hello Marcus,
Wednesday, July 2, 2003, 1:13:11 AM, you wrote:
MB> Hello Marcus,
MB> Wednesday, July 2, 2003, 12:54:12 AM, you wrote:
MB>> Hello Marcus,
MB>> Monday, June 30, 2003, 2:28:35 AM, you wrote:
MB>>> - Fix __clone() visibility. When implementing singletons we must forbid calling
MB>>> __clone() by making it private (private function __clone() is the same to
MB>>> singletons as private function __construct() to factories). Also the clone
MB>>> mechanism must ensure the new object has all properties defined in the class.
MB>>> The current implementation doesn't do so what contradicts the inheritance
MB>>> model. The following example show both errors:
MB>>> php -r 'class t {var $x; private function __clone() {} }; $a = new t; $b =
MB>>> $a->__clone(); var_dump($a);var_dump($b);'
MB>>> object(t)#1 (1) {
MB>>> ["x"]=>
MB>>> NULL
MB>>> }
MB>>> object(t)#2 (0) {
MB>>> }
MB>> I looked into the way it works and was able to fix the visibility. However
MB>> there is still the problem that properties are not copied. I thing there are
MB>> two possible solutions:
MB>> a) create all properties in the new object before calling __clone
MB>> b) create all missing propertis after calling __clone. This way (i fear) we
MB>> would need a new opcode....
HA! I lied there was plan c. Fixed now for normal properties.
--
Best regards,
Marcus mailto:helly@php.net