1--TEST--
2Zend: Test object_init_with_constructor() API for objects without constructors
3--EXTENSIONS--
4zend_test
5--FILE--
6<?php
7
8class TestUserWithoutConstructor {
9    public function __destruct() {
10        echo 'Destructor for ', __CLASS__, PHP_EOL;
11    }
12}
13
14echo "#### Passing no args ####\n";
15echo "Userland class:\n";
16echo "Using new:\n";
17$o = new TestUserWithoutConstructor();
18var_dump($o);
19unset($o);
20echo "Using zend_object_init_with_constructor():\n";
21$o = zend_object_init_with_constructor("TestUserWithoutConstructor");
22var_dump($o);
23unset($o);
24
25echo "Internal class:\n";
26echo "Using new:\n";
27$o = new _ZendTestMagicCall();
28var_dump($o);
29unset($o);
30echo "Using zend_object_init_with_constructor():\n";
31$o = zend_object_init_with_constructor("_ZendTestMagicCall");
32var_dump($o);
33unset($o);
34
35echo "\n#### Passing extra positional args ####\n";
36echo "Userland class:\n";
37echo "Using new:\n";
38$o = new TestUserWithoutConstructor('position_arg');
39var_dump($o);
40unset($o);
41echo "Using zend_object_init_with_constructor():\n";
42$o = zend_object_init_with_constructor("TestUserWithoutConstructor", 'position_arg');
43var_dump($o);
44unset($o);
45
46echo "Internal class:\n";
47echo "Using new:\n";
48try {
49    $o = new _ZendTestMagicCall('position_arg');
50    var_dump($o);
51    unset($o);
52} catch (\Throwable $e) {
53    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
54}
55echo "Using zend_object_init_with_constructor():\n";
56try {
57    $o = zend_object_init_with_constructor("_ZendTestMagicCall", 'position_arg');
58    var_dump($o);
59    unset($o);
60} catch (\Throwable $e) {
61    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
62}
63
64echo "\n#### Passing extra named args ####\n";
65echo "Userland class:\n";
66echo "Using new:\n";
67try {
68    $o = new TestUserWithoutConstructor(unknown_param: 'named_arg');
69    var_dump($o);
70    unset($o);
71} catch (\Throwable $e) {
72    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
73}
74echo "Using zend_object_init_with_constructor():\n";
75try {
76    $o = zend_object_init_with_constructor("TestUserWithoutConstructor", unknown_param: 'named_arg');
77    var_dump($o);
78    unset($o);
79} catch (\Throwable $e) {
80    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
81}
82
83echo "Internal class:\n";
84echo "Using new:\n";
85try {
86    $o = new _ZendTestMagicCall(unknown_param: 'named_arg');
87    var_dump($o);
88    unset($o);
89} catch (\Throwable $e) {
90    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
91}
92echo "Using zend_object_init_with_constructor():\n";
93try {
94    $o = zend_object_init_with_constructor("_ZendTestMagicCall", unknown_param: 'named_arg');
95    var_dump($o);
96    unset($o);
97} catch (\Throwable $e) {
98    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
99}
100
101?>
102--EXPECT--
103#### Passing no args ####
104Userland class:
105Using new:
106object(TestUserWithoutConstructor)#1 (0) {
107}
108Destructor for TestUserWithoutConstructor
109Using zend_object_init_with_constructor():
110object(TestUserWithoutConstructor)#1 (0) {
111}
112Destructor for TestUserWithoutConstructor
113Internal class:
114Using new:
115object(_ZendTestMagicCall)#1 (0) {
116}
117Using zend_object_init_with_constructor():
118object(_ZendTestMagicCall)#1 (0) {
119}
120
121#### Passing extra positional args ####
122Userland class:
123Using new:
124object(TestUserWithoutConstructor)#1 (0) {
125}
126Destructor for TestUserWithoutConstructor
127Using zend_object_init_with_constructor():
128object(TestUserWithoutConstructor)#1 (0) {
129}
130Destructor for TestUserWithoutConstructor
131Internal class:
132Using new:
133object(_ZendTestMagicCall)#1 (0) {
134}
135Using zend_object_init_with_constructor():
136object(_ZendTestMagicCall)#1 (0) {
137}
138
139#### Passing extra named args ####
140Userland class:
141Using new:
142Error: Unknown named parameter $unknown_param
143Using zend_object_init_with_constructor():
144Error: Unknown named parameter $unknown_param
145Internal class:
146Using new:
147Error: Unknown named parameter $unknown_param
148Using zend_object_init_with_constructor():
149Error: Unknown named parameter $unknown_param
150