<?php
class A {
public function __construct() {
echo "A::__construct() ";
}
public function A() {
echo "A::A() ";
}
public function callme5() {
static::__construct();
}
public function callme4() {
$classname = get_class($this);
$this->$classname();
}
}
class B extends A {
public function __construct() {
echo "B::__construct() ";
}
public function B() {
echo "B::B() ";
}
}
class C extends A {
public function __construct() {
echo "C::__construct() ";
}
}
class D extends A {
public function D() {
echo "D::D() ";
}
}
echo "A: ";
$obj = new A();
$obj->callme4();
$obj->callme5();
echo "\nB: ";
$obj = new B();
$obj->callme4();
$obj->callme5();
echo "\nC: ";
$obj = new C();
//$obj->callme4(); // This produces an error
echo "(error) ";
$obj->callme5();
echo "\nD: ";
$obj = new D();
$obj->callme4();
$obj->callme5();
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
A: A::__construct() A::A() A::__construct()
B: B::__construct() B::B() B::__construct()
C: C::__construct() (error) C::__construct()
D: A::__construct() D::D() A::__construct()
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; D has a deprecated constructor in /in/TegfY on line 38
A: A::__construct() A::A() A::__construct()
B: B::__construct() B::B() B::__construct()
C: C::__construct() (error) C::__construct()
D: D::D() D::D() D::D()