1.接口实现完全实现设计与分定义接口类,从而解决php的多继承性
实例演示:
<?php
/**
* 建立接口
*/
interface iUser
{
const NAME='马云';
}
interface iUser2 extends iUser
{
const NAME2='阿里巴巴';
}
interface iUser3 extends iUser,iUser2
{
const NAME3='2000亿';
}
/**
* 工作类的实现
*/
class User implements iUser3
{
public function res()
{
return iUser2::NAME2.'的董事长'.iUser::NAME.'以总身价'.iUser3::NAME3.'蝉联中国首富!';
}
}
$obj=new User();
echo $obj->res();
?>
输出结果:
个人总结:之前完全没有接触过接口,没有办法举更好的实例来演示,理解接口的含义和运用,对应用场景和方法完全没有头绪。。。。。
2.trait
作用(1):实现了一种代码复用的方法,从而实现方法的多继承,与抽象类相似,但不能实例化
实例演示:
<?php
trait tUser
{
public function res()
{
$str=get_class_vars(__CLASS__);
$val=printf('<pre>%s</pre>',print_r($str,true));
// $key=implode('=>')
}
}
class User1
{
use tUser;
protected $name='马云';
protected $res='阿里巴巴';
protected $meny='2000亿';
}
class User2
{
use tUser;
protected $name='马化腾';
protected $res='腾讯';
protected $meny='1800亿';
}
echo (new User1())->res();
echo (new User2())->res();
?>
输出结果:
作用(2):在基类中具有先性,通过优先设置,降低单继承的影响性
实例演示:
<?php
trait tUser
{
public static function res()
{
return '这是tUser中的方法'.__METHOD__;
}
}
class User
{
public static function res()
{
return '这是父类User中的方法'.__METHOD__;
}
}
class User1 extends User
{
use tUser;
public static function res()
{
return '这个是子类User1中的方法'.__METHOD__;
}
}
echo (new User1())->res();
?>
输出结果:
注释子类中的方法:
<?php
trait tUser
{
public static function res()
{
return '这是tUser中的方法'.__METHOD__;
}
}
class User
{
public static function res()
{
return '这是父类User中的方法'.__METHOD__;
}
}
class User1 extends User
{
use tUser;
// public static function res()
// {
// return '这个是子类User1中的方法'.__METHOD__;
// }
}
echo (new User1())->res();
?>
输出结果:为trait中的方法
trait 的优先级为 子类->trait->父类