<?php
trait OverloadConstructor {
public function __construct(... $args) {
$length = strlen('initMethod');
foreach (get_class_methods($this) as $method) {
if (substr($method, 0, $length) === 'initMethod') {
$this->{$method}(... $args);
}
}
}
}
trait Init1 {
protected function initMethodInit1(... $args) {
echo 'initMethodInit1' . PHP_EOL;
}
}
trait Init2 {
protected function initMethodInit2(... $args) {
echo 'initMethodInit2' . PHP_EOL;
}
}
class InitTest {
use OverloadConstructor, Init1;
protected function initMethodInitTest(... $args) {
echo 'initMethodInitTest' . PHP_EOL;
}
}
class ChangeBehaviourOfInitTest extends InitTest {
use Init2;
protected function initMethodChangeBehaviourOfInitTest(... $args) {
echo 'initMethodChangeBehaviourOfInitTest' . PHP_EOL;
}
}
new InitTest();
new ChangeBehaviourOfInitTest();
- Output for 7.1.25, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.12
- initMethodInitTest
initMethodInit1
initMethodChangeBehaviourOfInitTest
initMethodInitTest
initMethodInit1
initMethodInit2
preferences:
153.94 ms | 408 KiB | 5 Q