Bug #53967 [Com]: ReflectionClass::isCloneable reports false positives
Edit report at https://bugs.php.net/bug.php?id=53967&edit=1
ID: 53967
Comment by: sebastian@php.net
Reported by: whatthejeff at gmail dot com
Summary: ReflectionClass::isCloneable reports false positives
Status: Analyzed
Type: Bug
Package: Reflection related
PHP Version: trunk-SVN-2011-02-09 (snap)
Block user comment: N
Private report: N
New Comment:
Is there any chance to fix ReflectionClass::isCloneable() to work correctly for all internal
classes?
Previous Comments:
------------------------------------------------------------------------
[2011-02-11 22:48:53] whatthejeff at gmail dot com
Yeah, I actually realized ReflectionClass::isCloneable wouldn't work for SplFileObject and
SplTempFileObject when I was looking at the implementation for
SplFileObject.
------------------------------------------------------------------------
[2011-02-11 22:43:57] felipe@php.net
SplFileObject and SplTempFileObject are exception because the way as it was coded, there is a logic
behinds it to decide if it is clonable or not...
------------------------------------------------------------------------
[2011-02-09 07:47:43] sebastian@php.net
I do not think that this is limited to SplFileObject. Have a look at
sb@thinkpad ~ % php -r'print_r(array_filter(get_declared_classes(),function($n){$c=new
ReflectionClass($n);return $c->isCloneable();}));'
Array
(
[0] => stdClass
[3] => Closure
[4] => DateTime
[5] => DateTimeZone
[6] => DateInterval
[7] => DatePeriod
[8] => LibXMLError
[13] => DOMStringList
[14] => DOMNameList
[15] => DOMImplementationList
[16] => DOMImplementationSource
[17] => DOMImplementation
[18] => DOMNode
[19] => DOMNameSpaceNode
[20] => DOMDocumentFragment
[21] => DOMDocument
[22] => DOMNodeList
[23] => DOMNamedNodeMap
[24] => DOMCharacterData
[25] => DOMAttr
[26] => DOMElement
[27] => DOMText
[28] => DOMComment
[29] => DOMTypeinfo
[30] => DOMUserDataHandler
[31] => DOMDomError
[32] => DOMErrorHandler
[33] => DOMLocator
[34] => DOMConfiguration
[35] => DOMCdataSection
[36] => DOMDocumentType
[37] => DOMNotation
[38] => DOMEntity
[39] => DOMEntityReference
[40] => DOMProcessingInstruction
[41] => DOMStringExtend
[42] => DOMXPath
[43] => finfo
[70] => EmptyIterator
[72] => ArrayObject
[73] => ArrayIterator
[74] => RecursiveArrayIterator
[75] => SplFileInfo
[76] => DirectoryIterator
[77] => FilesystemIterator
[78] => RecursiveDirectoryIterator
[79] => GlobIterator
[80] => SplFileObject
[81] => SplTempFileObject
[82] => SplDoublyLinkedList
[83] => SplQueue
[84] => SplStack
[86] => SplMinHeap
[87] => SplMaxHeap
[88] => SplPriorityQueue
[89] => SplFixedArray
[90] => SplObjectStorage
[91] => MultipleIterator
[93] => PDO
[94] => PDOStatement
[97] => Reflection
[107] => __PHP_Incomplete_Class
[108] => php_user_filter
[109] => Directory
[110] => SimpleXMLElement
[111] => SimpleXMLIterator
[112] => SoapClient
[113] => SoapVar
[114] => SoapServer
[116] => SoapParam
[117] => SoapHeader
[119] => Phar
[120] => PharData
[121] => PharFileInfo
[124] => XMLReader
)
I am sure that there are more false positives in there.
------------------------------------------------------------------------
[2011-02-09 04:30:41] whatthejeff at gmail dot com
Description:
------------
ReflectionClass::isCloneable returns true on some classes which are not actually
cloneable.
Test script:
---------------
<?php
$reflection = new ReflectionClass('SplFileObject');
var_dump($reflection->isCloneable());
$reflection = new ReflectionClass('SplTempFileObject');
var_dump($reflection->isCloneable());
?>
Expected result:
----------------
bool(false)
bool(false)
Actual result:
--------------
bool(true)
bool(true)
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=53967&edit=1
Thread (10 messages)