PHP基础:interface接口与trait组件基础
1.interface接口基础
interface接口相当于设计/抽象类,可将顶层设计代码放入interface接口中,再通过工作类的继承将其实现,接口不能被实例化,只能被继承。
interface iface{
// 接口常量:用关键字const声明
const MY='接口常量值';
// 接口方法
public function ifun();
}
// 实现(工作类),用关键字implements继承接口
class job implements iface{
public $myname='工作类属性值';
public function ifun(){
return '工作类中实现的接口方法:'.__FUNCTION__;
}
}
// 实例化工作类
$job=new job;
// 访问接口常量
echo '访问接口常量:',iface::MY,'<hr>';
// 访问工作类中的属性
echo '访问工作类中的属性:',$job->myname,'<hr>';
// 访问在工作类中实现的接口方法
echo '访问在工作类中实现的接口方法:',$job->ifun(),'<hr>';
2.trait组件基础
trait是一种很特殊的类,不能被实例化,也不能继承,只能嵌入其他类中,使用use关键字引入/嵌入其他类中,相当于是一个代码组件,哪里需要它就use它。
trait tClass
{
// 常规属性及方法
public $tname = '常规属性';
public function tfun()
{
return 'trait中的常规方法:'.__FUNCTION__;
}
// 静态属性及方法
public static $stname = '静态属性';
public static function stfun()
{
return 'trait中的静态方法:'.__FUNCTION__;
}
// 抽象
// 抽象静态属性
public static $cstname;
// 抽象静态方法
abstract public static function cstfun();
}
// trait相当于组件,可以直接引用或嵌入到其他的类中
class Classname1
{
// 类中使用trait , 用use 关键
use tClass;
// 抽象静态方法实现
public static function cstfun(){
return '实现trait中的抽象静态方法:'.__FUNCTION__;
}
// 在类内无法直接给trait中的抽象静态属性赋值?
}
class Classname2
{
// 类中使用trait , 用use 关键
use tClass;
// 抽象静态方法实现
public static function cstfun(){
return '实现trait中的抽象静态方法:'.__FUNCTION__;
}
// 在类内无法直接给trait中的抽象静态属性赋值?
}
// 实例化
$Class1=new Classname1;
// 给抽象静态属性赋值
Classname1::$cstname='在类外给trait抽象静态属性赋的值1';
echo $Class1->tname,'<hr>';
echo $Class1->tfun(),'<hr>';
echo $Class1::$stname,'<hr>';
echo $Class1::stfun(),'<hr>';
echo $Class1::$cstname,'<hr>';
echo $Class1::cstfun(),'<hr>';
// 实例化
$Class2=new Classname2;
// 给抽象静态属性赋值
Classname2::$cstname='在类外给trait抽象静态属性赋的值2';
echo $Class2->tname,'<hr>';
echo $Class2->tfun(),'<hr>';
echo $Class2::$stname,'<hr>';
echo $Class2::stfun(),'<hr>';
echo $Class2::$cstname,'<hr>';
echo $Class2::cstfun(),'<hr>';