トレイトの優先順位

概要

トレイトを使用する場合、同一のメソッドがクラスまたは基底クラスで定義されている場合によって

優先順位を決めている

順番は「現在のクラス>トレイト>継承クラス」らしい


サンプル

クラスとトレイトに同じメソッドが定義されている場合はクラスのメソッドを使用

<?php
	/********************************
	 * トレイトの確認
	 * 現在のクラスとトレイトのメソッドの優先順位
	 ********************************/
	// トレイトの定義
	trait TestTrait01{
		// トレイト内部でメソッドの定義
		public function test01(){
			echo __METHOD__ . "\n";
		}
	}
 
	// クラスの定義
	class TestClass01{
		use TestTrait01;
 
		// テストメソッド
		public function test01(){
			echo __METHOD__ . "\n";
		}
 
	}
 
	/*******************************
	 * クラスを生成して実行
	 *******************************/
	$obj = new TestClass01();
	$obj->test01();
 
 

結果

>php -f sample02.php
TestClass01::test01
 
>
 

基底クラスとトレイトに同じメソッドが定義されている場合はトレイトのメソッドを使用

<?php
	/********************************
	 * トレイトの確認
	 * 基底クラスとトレイトのメソッドの優先順位
	 ********************************/
	// トレイトの定義
	trait TestTrait01{
		// テストメソッド
		public function test02(){
			echo __METHOD__ . "\n";
		}
	}
 
	// クラスの定義
	class BaseClass01{
 
		// テストメソッド
		public function test02(){
			echo __METHOD__ . "\n";
		}
 
	}
	// クラスの定義
	class TestClass01 extends BaseClass01{
		use TestTrait01;
 
		// テストメソッド
		public function test01(){
			echo __METHOD__ . "\n";
		}
 
	}
 
	/*******************************
	 * クラスを生成して実行
	 *******************************/
	$obj = new TestClass01();
	$obj->test01();
	$obj->test02();
 
 
>php -f sample03.php
TestClass01::test01
TestTrait01::test02
 
>
 



最終更新:2012年11月24日 22:35