Browse Source
Fixed #74862: Unable to clone instance when private __clone defined
Fixed #74862: Unable to clone instance when private __clone defined
Even though __clone was implemented as private and called only from parent class, child extending class instance could not be cloned.pull/2729/merge
committed by
Nikita Popov
5 changed files with 106 additions and 15 deletions
-
2NEWS
-
43Zend/tests/bug74862.phpt
-
46Zend/tests/bug74862_2.phpt
-
6Zend/zend_vm_def.h
-
24Zend/zend_vm_execute.h
@ -0,0 +1,43 @@ |
|||
--TEST-- |
|||
Bug #74862 (Unable to clone instance when private __clone defined) |
|||
--FILE-- |
|||
<?php |
|||
|
|||
class a { |
|||
private function __clone() |
|||
{ |
|||
|
|||
} |
|||
|
|||
private function __construct() |
|||
{ |
|||
|
|||
} |
|||
|
|||
public static function getInstance() |
|||
{ |
|||
return new static(); |
|||
} |
|||
|
|||
public function cloneIt() |
|||
{ |
|||
$a = clone $this; |
|||
|
|||
return $a; |
|||
} |
|||
} |
|||
|
|||
class c extends a { |
|||
|
|||
} |
|||
|
|||
// private constructor |
|||
$d = c::getInstance(); |
|||
|
|||
// private clone |
|||
$e = $d->cloneIt(); |
|||
var_dump($e); |
|||
?> |
|||
--EXPECT-- |
|||
object(c)#2 (0) { |
|||
} |
|||
@ -0,0 +1,46 @@ |
|||
--TEST-- |
|||
Bug #74862 (Unable to clone instance when private __clone defined in a child class) |
|||
--FILE-- |
|||
<?php |
|||
|
|||
class main { |
|||
} |
|||
|
|||
class a extends main { |
|||
private function __clone() |
|||
{ |
|||
|
|||
} |
|||
|
|||
private function __construct() |
|||
{ |
|||
|
|||
} |
|||
|
|||
public static function getInstance() |
|||
{ |
|||
return new static(); |
|||
} |
|||
|
|||
public function cloneIt() |
|||
{ |
|||
$a = clone $this; |
|||
|
|||
return $a; |
|||
} |
|||
} |
|||
|
|||
class c extends a { |
|||
|
|||
} |
|||
|
|||
// private constructor |
|||
$d = c::getInstance(); |
|||
|
|||
// private clone |
|||
$e = $d->cloneIt(); |
|||
var_dump($e); |
|||
?> |
|||
--EXPECT-- |
|||
object(c)#2 (0) { |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue