File: bson-toPHP-009.phpt

package info (click to toggle)
php-mongodb 1.15.0%2B1.11.1%2B1.9.2%2B1.7.5-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 63,984 kB
  • sloc: ansic: 328,429; xml: 10,797; php: 4,235; sh: 179; python: 47; pascal: 36; makefile: 3
file content (88 lines) | stat: -rw-r--r-- 2,176 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
--TEST--
MongoDB\BSON\toPHP(): Setting fieldPath typemaps for compound types with numerical keys
--FILE--
<?php

require_once __DIR__ . "/../utils/basic.inc";

class MyArrayObject extends ArrayObject implements MongoDB\BSON\Unserializable
{
    public function bsonUnserialize(array $data): void
    {
        parent::__construct($data, ArrayObject::ARRAY_AS_PROPS);
    }
}

$bson = \MongoDB\BSON\fromPHP( [
    '_id' => 1,
    'array0' => [0 => [ 4, 5, 6 ], 1 => [ 7, 8, 9 ]],
    'array1' => [1 => [ 4, 5, 6 ], 2 => [ 7, 8, 9 ]],
] );

function fetch($bson, $typeMap = []) {
    return \MongoDB\BSON\toPHP($bson, $typeMap);
}


echo "Default\n";
$document = fetch($bson);
var_dump($document instanceof stdClass);
var_dump(is_array($document->array0));
var_dump(is_object($document->array1));
var_dump($document->array1 instanceof stdClass);

echo "\nSetting 'array0' path to 'MyArrayObject'\n";
$document = fetch($bson, ["fieldPaths" => [
    'array0' => "MyArrayObject"
]]);
var_dump($document instanceof stdClass);
var_dump(is_object($document->array0));
var_dump($document->array0 instanceof MyArrayObject);

echo "\nSetting 'array0.1' path to 'MyArrayObject'\n";
$document = fetch($bson, ["fieldPaths" => [
    'array0.1'  => "MyArrayObject",
]]);
var_dump($document instanceof stdClass);
var_dump(is_array($document->array0));
var_dump(is_array($document->array0[0]));
var_dump($document->array0[1] instanceof MyArrayObject);

echo "\nSetting 'array1.1' path to 'MyArrayObject'\n";
$document = fetch($bson, ["fieldPaths" => [
    'array1.1'  => "MyArrayObject",
]]);
var_dump($document instanceof stdClass);
var_dump(is_object($document->array1));
var_dump($document->array1 instanceof stdClass);
$a = ((array) $document->array1);
var_dump($a[1] instanceof MyArrayObject);
var_dump(is_array($a[2]));
?>
===DONE===
<?php exit(0); ?>
--EXPECT--
Default
bool(true)
bool(true)
bool(true)
bool(true)

Setting 'array0' path to 'MyArrayObject'
bool(true)
bool(true)
bool(true)

Setting 'array0.1' path to 'MyArrayObject'
bool(true)
bool(true)
bool(true)
bool(true)

Setting 'array1.1' path to 'MyArrayObject'
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
===DONE===