1
+ --TEST--
2
+ PHPC-2505: Setting and unsetting a property may interfere with using foreach to iterate objects
3
+ --FILE--
4
+ <?php
5
+ require_once __DIR__ . "/../utils/basic.inc " ;
6
+
7
+ $ tests = [
8
+ [ 'binary ' => new MongoDB \BSON \Binary ('foo ' , MongoDB \BSON \Binary::TYPE_GENERIC ) ],
9
+ [ 'dbpointer ' => createDBPointer () ],
10
+ [ 'decimal128 ' => new MongoDB \BSON \Decimal128 ('1234.5678 ' ) ],
11
+ [ 'int64 ' => new MongoDB \BSON \Int64 ('9223372036854775807 ' ) ],
12
+ // JavaScript w/ scope may not be necessary (same code path as w/o scope), but we'll test it anyway
13
+ [ 'javascript ' => new MongoDB \BSON \Javascript ('function() { return 1; } ' ) ],
14
+ [ 'javascript_ws ' => new MongoDB \BSON \Javascript ('function() { return a; } ' , ['a ' => 1 ]) ],
15
+ // MaxKey and MinKey don't have get_properties or get_gc handlers, but we'll test them anyway
16
+ [ 'maxkey ' => new MongoDB \BSON \MaxKey ],
17
+ [ 'minkey ' => new MongoDB \BSON \MinKey ],
18
+ [ 'objectid ' => new MongoDB \BSON \ObjectId ],
19
+ [ 'regex ' => new MongoDB \BSON \Regex ('pattern ' , 'i ' ) ],
20
+ [ 'symbol ' => createSymbol () ],
21
+ [ 'timestamp ' => new MongoDB \BSON \Timestamp (1234 , 5678 ) ],
22
+ [ 'utcdatetime ' => new MongoDB \BSON \UTCDateTime ],
23
+ ];
24
+
25
+ ob_start ();
26
+ foreach ($ tests as $ test ) {
27
+ echo key ($ test ), "\n" ;
28
+ $ test = reset ($ test );
29
+
30
+ foreach ($ test as $ k => $ v ) {
31
+ var_dump ($ k , $ v );
32
+ }
33
+ }
34
+ $ buf1 = ob_get_clean ();
35
+
36
+ foreach ($ tests as $ test ) {
37
+ $ test = reset ($ test );
38
+ $ test ->a = 'test ' ;
39
+ unset($ test ->a );
40
+ }
41
+
42
+ ob_start ();
43
+ foreach ($ tests as $ test ) {
44
+ echo key ($ test ), "\n" ;
45
+ $ test = reset ($ test );
46
+
47
+ foreach ($ test as $ k => $ v ) {
48
+ var_dump ($ k , $ v );
49
+ }
50
+ }
51
+ $ buf2 = ob_get_clean ();
52
+
53
+ if ($ buf1 === $ buf2 ) {
54
+ echo "OK! \n" ;
55
+ exit (0 );
56
+ } else {
57
+ echo ("buf1 != buf2: $ buf1 \n!= \n$ buf2 \n" );
58
+ }
59
+
60
+ ?>
61
+ --EXPECT--
62
+ OK!
0 commit comments