46. プロパティの定義
trait logger {
public $x = 5;
}
class MyClass {
use logger;
function myMethod() {
var_dump($this->x);
}
}
$c = new MyClass();
$c->myMethod();
12年6月16日土曜日
47. 同名の優先順位
trait logger {
public function write() { echo "logger"; }
}
trait writer {
public function write() { echo "writer"; }
}
class MyClass {
use logger, writer {
writer::write insteadof logger;
}
}
$c = new MyClass();
$c->write(); // writer
12年6月16日土曜日
48. 可視性の変更/エイリアス
trait logger {
public function log($var) {
return error_log($var);
}
}
class MyClass {
use logger { log as private _log; }
function myMethod() {
$this->log("myMethod");
$this->_log("myMethod");
}
}
$c = new MyClass();
$c->myMethod();
// $c->_log(); // error
12年6月16日土曜日
49. トレイトの組み合わせ
trait Hello {
public function sayHello() { echo 'Hello '; }
}
trait World {
public function sayWorld() { echo 'World!'; }
}
trait HelloWorld {
use Hello, World;
}
class MyHelloWorld {
use HelloWorld;
}
$o = new MyHelloWorld();
$o->sayHello();
$o->sayWorld();
12年6月16日土曜日
50. 抽象メソッドを持つトレイト
trait Hello {
public function sayHelloWorld() {
echo 'Hello '.$this->getWorld();
}
abstract public function getWorld();
}
class MyHelloWorld {
use Hello;
public function getWorld() {
return 'Hokkaido!';
}
}
$o = new MyHelloWorld();
$o->sayHelloWorld();
12年6月16日土曜日