Php 使用链式特征的面向方面编程

Php 使用链式特征的面向方面编程,php,traits,Php,Traits,我目前正在评估我是否要在我的软件项目中使用traits。在这个项目中,我想使用面向方面编程()将系统逻辑与业务逻辑解耦 我想要一个记录器特性和一个缓存特性。 现在的问题是:是否有可能在同一类方法中使用这两种特性?有明确的执行顺序吗 思想示例: trait Logger { public function warn($argument) { $result = parent::__FUNCTION__($argument); if(!$result) echo "warn";

我目前正在评估我是否要在我的软件项目中使用traits。在这个项目中,我想使用面向方面编程()将系统逻辑与业务逻辑解耦

我想要一个记录器特性和一个缓存特性。 现在的问题是:是否有可能在同一类方法中使用这两种特性?有明确的执行顺序吗

思想示例:

trait Logger {
  public function warn($argument) {
    $result = parent::__FUNCTION__($argument);
    if(!$result) echo "warn";
    return $result;
  }
}

trait Cacher {
  public function cache($argument) {
    if(CACHE::contains(__FUNCTION__, $argument)) {
      return CACHE::get(__FUNCTION__, $argument);
    }
    return parent::__FUNCTION__($argument);
  }
}

class MyBusiness {
  use Logger, Cache { Logger::logger as myTest, Cache::cache as myTest before Logger }

  public function myTest(boolean $someBool) {
    return !$someBool;
  }
}

执行顺序应该是输入Cache::Cache,输入Logger::Logger,输入myTest return!bool,记录,缓存。

你必须阅读更多关于特性和魔法方法的内容,因为我认为你误解了它们的实用性。。此外,您应该考虑了解依赖注入来注销日志和缓存服务,只要您需要它们。@ MateiMihai面向方面编程的漏洞不是使用依赖性注入来解决诸如日志或缓存之类的交叉问题,所谓的特征表示类似或甚至等价的解决方案。你必须多读一些关于特质和魔法方法的书,因为我认为你误解了它们的效用。。此外,您应该考虑了解依赖注入来注销日志和缓存服务,只要您需要它们。@ MateiMihai面向方面编程的漏洞不是使用依赖性注入来解决诸如日志或缓存之类的交叉问题,所谓的特征表示类似或甚至等价的解决方案。