2017-01-17 125 views
1
trait World { 

    public function sayHello() 
    { 
     echo "World!"; 
    } 
} 

abstract class AbstractHello{} 

class Hello extends AbstractHello { 
    use World; 

    public function sayHello() 
    { 
     echo "Hello"; 
     $this->sayHello(); // calling its not working 
    } 
} 

class Hello2 extends AbstractHello { 
    use World; 
} 

现在,如果我打电话如下,它应该显示“HelloWorld!”如果两个方法名称相同,如何从使用该特征的类方法调用traits方法?

$h = new Hello(); 
$h->sayHello(); 

而且如果调用如下,它应该显示“世界!”

$h = new Hello2(); 
$h->sayHello(); 

我不想更改使用作为运营商的性状的方法的名字,因为sayHello()方法已经从其他地方的孩子一样类称为Hello2。

上面的代码不起作用。任何帮助?

回答

2

在您的Hello类中,您必须为sayHello()特征方法创建别名。

class Hello extends AbstractHello { 
    use World 
    { 
     sayHello as sayHelloWorld; 
    } 

    public function sayHello() 
    { 
     echo "Hello"; 
     $this->sayHelloWorld(); // calling it's working now 
    } 
} 
+0

Thanks @ marian0。它运行良好。 –

相关问题