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();

结果分析:

  1. trait本质上还是一个类
  2. Demo类继承了Base类,引入TestTrait组件继承其属性和方法
  3. (new Demo())->testA(); 继承自TestTrait::testA(),执行结果 A
  4. (new Demo())->testB();在Demo类中TestTrait类的testB被重写,执行结果是 D

运行上述程序:最终结果是AD

综上, trait是PHP实现多继承的一种折中的方法, 姑且叫它”假多继承“, 可以认为一个类(Demo类)包含了另一个类TestTrait, 最终目的是为了实现代码复用.

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 11

trait 的出现本身是为了解决 PHP 的「单继承」问题

同名方法优先级排序: 当前类 > trait > parent

5个月前 评论

trait 的出现本身是为了解决 PHP 的「单继承」问题

同名方法优先级排序: 当前类 > trait > parent

5个月前 评论

这是高级开发的面试题吗?没流量到处复制粘贴,这能赚多少钱?高级开发,忘了语法难道不会直接去查文档,难道还要专程过来看你这帖子,浪费公共资源。

www.php.net/manual/zh/language.oop...

5个月前 评论
lovewei (作者) 5个月前
zongscan 5个月前
zongscan 5个月前
lovewei (作者) 5个月前
一念沧海一念桑田 5个月前
lovewei (作者) 5个月前
徵羽宫 5个月前
lovewei (作者) 5个月前
徵羽宫 5个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!