php学习笔记--trait的使用(为实现多继承产生)

trait是为实现多继承产生,php5.4的新特性
使用方法如下:

<?php
trait Tool{
    function getName(){
        echo "tool name";
    }
}

class HammerTool{
    use Tool
}

$tempTool = new HammerTool();
$tempTool->getName();//输出:tool name

优先级是,子类覆盖trait,trait覆盖子类继承的父类。
如果use几个trait,且trait中有相同的方法可用insteadof或as方法来实现替换或重命名。
如:

<?php
trait A{
    function smallTalk(){
        echo "A smallTalk";
    }
    function bigTalk(){
        echo "A bigTalk";
    }
}

trait B{
    function smallTalk(){
        echo "B smallTalk";
    }
    function bigTalk(){
        echo "B bigTalk";
    }
    function middleTalk(){
        echo "B middleTalk";
    }
}

class Talker {
    use A, B {
        B::smallTalk insteadof A;//用B的smallTalk替换A的方法。
        A::bigTalk insteadof B;
        B::middleTalk as private myPrivateHello;//重命名为B
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将 Config 类改写为继承 trait 的方法可以使代码更加灵活,可以在不同的场景中复用 trait,同时也可以让代码更加清晰。下面是一个将 Config 类改写为继承 trait 的示例: ```scala import scopt.OptionParser trait Config { def input: String def output: String def verbose: Boolean } case class MyAppConfig(input: String, output: String, verbose: Boolean) extends Config object MyApp { def main(args: Array[String]): Unit = { val parser = new OptionParser[Config]("my-app") { opt[String]("input") .required() .action((value, config) => config.asInstanceOf[MyAppConfig].copy(input = value)) .text("input file path") opt[String]("output") .required() .action((value, config) => config.asInstanceOf[MyAppConfig].copy(output = value)) .text("output file path") opt[Unit]("verbose") .action((_, config) => config.asInstanceOf[MyAppConfig].copy(verbose = true)) .text("enable verbose output") } parser.parse(args, MyAppConfig("", "", false)) match { case Some(config) => // 执行你的代码,使用 config.input、config.output、config.verbose 等参数 case None => // 解析失败,输出错误信息 } } } ``` 在上面的示例中,我们将 Config 类改写为一个 trait,并定义了一个 case class MyAppConfig 来实现trait。我们在 OptionParser 中使用 Config 类型而不是 MyAppConfig 类型。在 `action` 方法中,我们使用 `asInstanceOf` 方法将 Config 类型转换为 MyAppConfig 类型,并更新相应的参数值。最后,在 `parser.parse` 方法中解析命令行参数,并根据解析结果执行相应的代码。 需要注意的是,在使用 trait 的方法中,我们需要在 trait 中定义所有的参数,并在实现类中实现这些参数。如果 trait 中定义了很多参数,而实现类只需要其中的一部分,那么可以考虑将 trait 拆分成多个小的 trait,使代码更加清晰。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值