I have the following code as a sample.
trait sampletrait{
function hello(){
echo "hello from trait";
}
}
class client{
use sampletrait;
function hello(){
echo "hello from class";
//From within here, how do I call traits hello() function also?
}
}
I could put all the details as to why this is necessary but I want to keep this question simple. Extending from the class client is not the answer here due to my particular situation.
Is it possible to have a trait have the same function name as the class using it, but call the traits function in addition to the classes function?
Currently it will only use the classes function (as it seems to override the traits)
You can do it this way :
class client{
use sampletrait {
hello as protected sampletrait_hello;
}
function hello(){
$this->sampletrait_hello();
echo "hello from class";
}
}
Edit : Whops, forgot $this-> (thanks JasonBoss)
Edit 2 : Just did some research on "renaming" trait functions.
If you are renaming a function but not overwriting another one (see the example), both functions will exist (php 7.1.4) :
trait T{
public function f(){
echo "T";
}
}
class C{
use T {
f as public f2;
}
}
$c = new C();
$c->f();
$c->f2();
You can only change the visibility :
trait T{
public function f(){
echo "T";
}
}
class C{
use T {
f as protected;
}
}
$c->f();// Won't work
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With