Belajar PHP OOP Part 1.21 : Trait conflict
- Jika kita menggunakan lebih dari satu trait, lalu terdapat function yang sama di trait tersebut
- Maka hal tersebut akan menyebabkan konflik dan terjadi error
- Jika terjadi konflik seperti ini, kita bisa mengatasinya dengan menggunakan kata kunci insteadof
Error
<?php
trait A {
function doA(): void
{
echo "a" . PHP_EOL;
}
function doB(): void
{
echo "b" . PHP_EOL;
}
}
trait B {
function doA(): void
{
echo "A" . PHP_EOL;
}
function doB(): void
{
echo "B" . PHP_EOL;
}
}
class Sample
{
use A, B;
}
$sample = new Sample();
$sample->doA();
$sample->doB();
Solusi
<?php
trait A {
function doA(): void
{
echo "a" . PHP_EOL;
}
function doB(): void
{
echo "b" . PHP_EOL;
}
}
trait B {
function doA(): void
{
echo "A" . PHP_EOL;
}
function doB(): void
{
echo "B" . PHP_EOL;
}
}
class Sample
{
use A, B{
A::doA insteadof B;
B::doB insteadof A;
}
}
$sample = new Sample();
$sample->doA();
$sample->doB();