PHPで形質をテストしている間、私はなぜ形質が導入されたのか混乱しました。私は小さな実験をしました。まず私は、エラーなぜ形質を直接インスタンス化できないのですか?
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 TheWorldIsNotEnough {
use HelloWorld;
public function sayHellos() {
$o = new HelloWorld();
$o->sayHello();
}
}
$o = new TheWorldIsNotEnough();
$o->sayHellos();
?>
クラスの直接形質メソッドと呼ばしかし、私はこの
<?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を使う利点は?' +インスタンス化せずにメソッドを呼び出すことです。 – revo