1--TEST--
2Testing ReflectionClass::isCloneable()
3--SKIPIF--
4<?php if (!extension_loaded('simplexml') || !extension_loaded('xmlwriter')) die("skip SimpleXML and XMLWriter is required for this test"); ?>
5--FILE--
6<?php
7
8class foo {
9}
10$foo = new foo;
11
12print "User class\n";
13$obj = new ReflectionClass($foo);
14var_dump($obj->isCloneable());
15$obj = new ReflectionObject($foo);
16var_dump($obj->isCloneable());
17$h = clone $foo;
18
19class bar {
20    private function __clone() {
21    }
22}
23$bar = new bar;
24print "User class - private __clone\n";
25$obj = new ReflectionClass($bar);
26var_dump($obj->isCloneable());
27$obj = new ReflectionObject($bar);
28var_dump($obj->isCloneable());
29$h = clone $foo;
30
31print "Closure\n";
32$closure = function () { };
33$obj = new ReflectionClass($closure);
34var_dump($obj->isCloneable());
35$obj = new ReflectionObject($closure);
36var_dump($obj->isCloneable());
37$h = clone $closure;
38
39print "Internal class - SimpleXMLElement\n";
40$obj = new ReflectionClass('simplexmlelement');
41var_dump($obj->isCloneable());
42$obj = new ReflectionObject(new simplexmlelement('<test></test>'));
43var_dump($obj->isCloneable());
44$h = clone new simplexmlelement('<test></test>');
45
46print "Internal class - XMLWriter\n";
47$obj = new ReflectionClass('xmlwriter');
48var_dump($obj->isCloneable());
49$obj = new ReflectionObject(new XMLWriter);
50var_dump($obj->isCloneable());
51$h = clone new xmlwriter;
52
53?>
54--EXPECTF--
55User class
56bool(true)
57bool(true)
58User class - private __clone
59bool(false)
60bool(false)
61Closure
62bool(true)
63bool(true)
64Internal class - SimpleXMLElement
65bool(true)
66bool(true)
67Internal class - XMLWriter
68bool(false)
69bool(false)
70
71Fatal error: Uncaught Error: Trying to clone an uncloneable object of class XMLWriter in %s:%d
72Stack trace:
73#0 {main}
74  thrown in %s on line %d
75