Προτεραιότητα μεθόδων κατά την εργασία με traits στο OOP της PHP
Εάν μια κλάση και ένα trait έχουν μια μέθοδο με το ίδιο όνομα, τότε η μέθοδος της κλάσης θα παρακάμψει τη μέθοδο του trait:
<?php
trait TestTrait
{
// Μέθοδος με όνομα method:
public function method()
{
return 'trait';
}
}
class TestClass
{
use TestTrait;
// Η ίδια μέθοδος με όνομα method:
public function method()
{
return 'test';
}
}
$test = new TestClass;
echo $test->method(); // θα εμφανίσει 'test' - ενεργοποιήθηκε η μέθοδος της ίδιας της κλάσης
?>
Εάν η ίδια η κλάση δεν έχει μια τέτοια μέθοδο, αλλά υπάρχει μια διένεξη ονομάτων μεταξύ μεθόδων του trait και μεθόδων της γονικής κλάσης, τότε οι μέθοδοι του trait έχουν προτεραιότητα:
<?php
trait TestTrait
{
// Μέθοδος με όνομα method:
public function method()
{
return 'trait';
}
}
// Γονική κλάση:
class ParentClass
{
// Μέθοδος με όνομα method:
public function method()
{
return 'parent';
}
}
// Η κλάση κληρονομεί τη μέθοδο method από τον γονέα:
class TestClass extends ParentClass
{
use TestTrait;
}
$test = new TestClass;
echo $test->method(); // θα εμφανίσει 'trait', αφού το trait έχει προτεραιότητα
?>