PHP高级开发面试题--Laravel中Trait继承特性
此题为最新PHP高级开发面试真题,主要考察Laravel中Trait继承特性
trait代码
<?php
namespace App\Traits;
trait TestTrait
{
function testA()
{
echo "A";
}
function testB()
{
echo "B";
}
}
base基类代码
<?php
namespace App\Http\Controllers;
class Base
{
function testA(){
echo 'C';
}
}
执行以下程序会输出什么
<?php
namespace App\Http\Controllers;
use TestTrait;
class Demo extends Base
{
use TestTrait{
TestTrait::testB as private;
}
// 提示:需要考虑trait继承的特性
function testB()
{
echo 'D';
}
}
(new Demo())->testA();
(new Demo())->testB();
结果分析:
- trait本质上还是一个类
- Demo类继承了Base类,引入TestTrait组件继承其属性和方法
- (new Demo())->testA(); 继承自TestTrait::testA(),执行结果 A
- (new Demo())->testB();在Demo类中TestTrait类的testB被重写,执行结果是 D
运行上述程序:最终结果是AD
综上, trait是PHP实现多继承的一种折中的方法, 姑且叫它”假多继承“, 可以认为一个类(Demo类)包含了另一个类TestTrait, 最终目的是为了实现代码复用.
高认可度评论:
trait 的出现本身是为了解决 PHP 的「单继承」问题
同名方法优先级排序: 当前类 > trait > parent
trait 的出现本身是为了解决 PHP 的「单继承」问题
同名方法优先级排序: 当前类 > trait > parent
这是高级开发的面试题吗?没流量到处复制粘贴,这能赚多少钱?高级开发,忘了语法难道不会直接去查文档,难道还要专程过来看你这帖子,浪费公共资源。
www.php.net/manual/zh/language.oop...