在PHP中测试性状的时候,我对引入特征的原因有些困惑。我做了一些小实验。首先,我直接调用的类为什么Traits不能直接实例化?
<?php
trait HelloWorld {
public function sayHello() {
echo 'Hello World!';
}
}
class TheWorldIsNotEnough {
use HelloWorld;
public function sayHellos() {
$o = new HelloWorld();
$o->sayHello();
}
}
$o = new TheWorldIsNotEnough();
$o->sayHellos();
?>
我得到一个错误
Fatal error: Cannot instantiate trait HelloWorld in C:\xampp\htdocs\test.php on line 35
特质的方法,但是,当我这样做
<?php
trait HelloWorld {
public function sayHello() {
echo 'Hello World!';
}
}
class MyHelloWorld {
use HelloWorld;
}
class TheWorldIsNotEnough {
use HelloWorld;
public function sayHellos() {
$o = new MyHelloWorld();
$o->sayHello();
}
}
$o = new TheWorldIsNotEnough();
$o->sayHellos();
?>
我能够调用性状方法和结果显示“Hello World!”。 那么使用Traits的优点是什么?它与抽象类有什么不同?请帮助我了解使用情况。谢谢。
你为什么不做'$ this-> sayHello();'? – tkausl
@tkausl这意味着当我在类中使用traits时,它会自动实例化。 –
- “使用Traits的优点是什么?'+在不实例化的情况下调用它的方法。 – revo