【发布时间】:2016-07-07 05:16:30
【问题描述】:
在 PHP 中测试特征时,我有点困惑为什么要引入特征。我做了一些小实验。首先,我直接在一个类中调用了 trait 方法
<?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();
?>
我能够调用 trait 方法,结果显示“Hello World!”。 那么使用 Traits 有什么优势,它与抽象类有什么不同呢?请帮助我了解用法。谢谢。
【问题讨论】:
-
你为什么不直接做
$this->sayHello();? -
@tkausl 这意味着当我在类中使用特征时,它会自动实例化。
-
-
what is advantage of using Traits?+ 调用它的方法而不实例化。 -
@revo 所以基本上我们只保存一行代码。
-
在设计方面,还有很多。
标签: php class abstract traits php-5.4