我将以下代码作为样本。
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?
}
}
我可以把所有细节都说明为什么这是必要的,但我想让这个问题变得简单。由于我的特殊情况,从班级客户端延伸不是答案。
是否可以让一个特征与使用它的类具有相同的函数名称,但除了类函数之外还调用特征函数?
目前它只会使用类函数(因为它似乎覆盖了特征)
答案 0 :(得分:10)
你可以这样做:
trait T{
public function f(){
echo "T";
}
}
class C{
use T {
f as public f2;
}
}
$c = new C();
$c->f();
$c->f2();
编辑: 哎呀,忘了$ this-> (感谢JasonBoss)
编辑2: 刚做了一些关于“重命名”特质功能的研究。
如果要重命名函数但不覆盖另一个函数(参见示例),则两个函数都将存在(php 7.1.4):
trait T{
public function f(){
echo "T";
}
}
class C{
use T {
f as protected;
}
}
$c->f();// Won't work
您只能更改公开程度:
{{1}}
答案 1 :(得分:1)
是的,你也可以这样做,你可以像这样使用trait
的多个功能。
<?php
ini_set('display_errors', 1);
trait sampletrait
{
function hello()
{
echo "hello from trait";
}
}
class client
{
use sampletrait
{
sampletrait::hello as trait_hello;//alias method
}
function hello()
{
$this->trait_hello();
echo "hello from class";
}
}