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