1--TEST--
2ReflectionMethod::isConstructor()
3--FILE--
4<?php
5
6class NewCtor {
7    function __construct() {
8        echo "In " . __METHOD__ . "\n";
9    }
10
11}
12echo "New-style constructor:\n";
13$methodInfo = new ReflectionMethod("NewCtor::__construct");
14var_dump($methodInfo->isConstructor());
15
16class ExtendsNewCtor extends NewCtor {
17}
18echo "\nInherited new-style constructor\n";
19$methodInfo = new ReflectionMethod("ExtendsNewCtor::__construct");
20var_dump($methodInfo->isConstructor());
21
22class OldCtor {
23    function OldCtor() {
24        echo "In " . __METHOD__ . "\n";
25    }
26}
27echo "\nOld-style constructor:\n";
28$methodInfo = new ReflectionMethod("OldCtor::OldCtor");
29var_dump($methodInfo->isConstructor());
30
31class ExtendsOldCtor extends OldCtor {
32}
33echo "\nInherited old-style constructor:\n";
34$methodInfo = new ReflectionMethod("ExtendsOldCtor::OldCtor");
35var_dump($methodInfo->isConstructor());
36
37class X {
38    function Y() {
39        echo "In " . __METHOD__ . "\n";
40    }
41}
42echo "\nNot a constructor:\n";
43$methodInfo = new ReflectionMethod("X::Y");
44var_dump($methodInfo->isConstructor());
45
46class Y extends X {
47}
48echo "\nInherited method of the same name as the class:\n";
49$methodInfo = new ReflectionMethod("Y::Y");
50var_dump($methodInfo->isConstructor());
51
52class OldAndNewCtor {
53    function OldAndNewCtor() {
54        echo "In " . __METHOD__ . "\n";
55    }
56
57    function __construct() {
58        echo "In " . __METHOD__ . "\n";
59    }
60}
61echo "\nOld-style constructor:\n";
62$methodInfo = new ReflectionMethod("OldAndNewCtor::OldAndNewCtor");
63var_dump($methodInfo->isConstructor());
64
65echo "\nRedefined constructor:\n";
66$methodInfo = new ReflectionMethod("OldAndNewCtor::__construct");
67var_dump($methodInfo->isConstructor());
68
69class NewAndOldCtor {
70    function __construct() {
71        echo "In " . __METHOD__ . "\n";
72    }
73
74    function NewAndOldCtor() {
75        echo "In " . __METHOD__ . "\n";
76    }
77}
78echo "\nNew-style constructor:\n";
79$methodInfo = new ReflectionMethod("NewAndOldCtor::__construct");
80var_dump($methodInfo->isConstructor());
81
82echo "\nRedefined old-style constructor:\n";
83$methodInfo = new ReflectionMethod("NewAndOldCtor::NewAndOldCtor");
84var_dump($methodInfo->isConstructor());
85
86?>
87--EXPECTF--
88Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; OldCtor has a deprecated constructor in %s on line %d
89New-style constructor:
90bool(true)
91
92Inherited new-style constructor
93bool(true)
94
95Old-style constructor:
96bool(true)
97
98Inherited old-style constructor:
99bool(true)
100
101Not a constructor:
102bool(false)
103
104Inherited method of the same name as the class:
105bool(false)
106
107Old-style constructor:
108bool(false)
109
110Redefined constructor:
111bool(true)
112
113New-style constructor:
114bool(true)
115
116Redefined old-style constructor:
117bool(false)
118