<?php
class A {
public function __construct() {
echo "A::__construct()\n";
}
public function A() {
echo "A::A()\n";
}
public function callme5() {
static::__construct();
}
public function callme4() {
$classname = get_class($this);
$this->$classname();
}
}
class B extends A {
public function __construct() {
echo "B::__construct()\n";
}
public function B() {
echo "B::B()\n";
}
}
class C extends A {
public function __construct() {
echo "C::__construct()\n";
}
}
class D extends A {
public function D() {
echo "D::D()\n";
}
}
echo "---A---\n";
$obj = new A();
$obj->callme4();
$obj->callme5();
echo "---B---\n";
$obj = new B();
$obj->callme4();
$obj->callme5();
echo "---C---\n";
$obj = new C();
//$obj->callme4(); // This produces an error
$obj->callme5();
echo "---D---\n";
$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()
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/HVNOI on line 38
---A---
A::__construct()
A::A()
A::__construct()
---B---
B::__construct()
B::B()
B::__construct()
---C---
C::__construct()
C::__construct()
---D---
D::D()
D::D()
D::D()