xref: /PHP-5.4/tests/classes/__call_007.phpt (revision 2462fce2)
1--TEST--
2Ensure exceptions are handled properly when thrown in a statically declared __call.
3--FILE--
4<?php
5class A {
6	static function __call($strMethod, $arrArgs) {
7		@var_dump($this);
8		throw new Exception;
9		echo "You should not see this";
10	}
11	function test() {
12		A::unknownCalledWithSRO(1,2,3);
13	}
14}
15
16class B extends A {
17	function test() {
18		B::unknownCalledWithSROFromChild(1,2,3);
19	}
20}
21
22$a = new A();
23
24echo "---> Invoke __call via simple method call.\n";
25try {
26	$a->unknown();
27} catch (Exception $e) {
28	echo "Exception caught OK; continuing.\n";
29}
30
31echo "\n\n---> Invoke __call via scope resolution operator within instance.\n";
32try {
33	$a->test();
34} catch (Exception $e) {
35	echo "Exception caught OK; continuing.\n";
36}
37
38echo "\n\n---> Invoke __call via scope resolution operator within child instance.\n";
39$b = new B();
40try {
41	$b->test();
42} catch (Exception $e) {
43	echo "Exception caught OK; continuing.\n";
44}
45
46echo "\n\n---> Invoke __call via callback.\n";
47try {
48	call_user_func(array($b, 'unknownCallback'), 1,2,3);
49} catch (Exception $e) {
50	echo "Exception caught OK; continuing.\n";
51}
52?>
53==DONE==
54--EXPECTF--
55Warning: The magic method __call() must have public visibility and cannot be static in %s on line 3
56---> Invoke __call via simple method call.
57NULL
58Exception caught OK; continuing.
59
60
61---> Invoke __call via scope resolution operator within instance.
62NULL
63Exception caught OK; continuing.
64
65
66---> Invoke __call via scope resolution operator within child instance.
67NULL
68Exception caught OK; continuing.
69
70
71---> Invoke __call via callback.
72NULL
73Exception caught OK; continuing.
74==DONE==