当前位置: 首页 > 面试题库 >

PHP的特质–任何实际示例/最佳实践?

蔡弘扬
2023-03-14
问题内容

特性已成为PHP5.4的最大新增功能之一。我了解语法并了解特性背后的思想,例如将水平代码重用于日志,安全性,缓存等常见内容。

但是,我仍然不知道如何在项目中利用特质。

是否有任何已经使用了特征的开源项目?关于如何使用特征构造体系结构的任何好的文章/阅读材料?


问题答案:

我个人的观点是,在编写简洁的代码时实际上很少使用特质。

与其使用特征将代码入侵到类中,不如通过构造函数或setter传递依赖项:

class ClassName {
    protected $logger;

    public function __construct(LoggerInterface $logger) {
        $this->logger = $logger;
    }
    // or
    public function setLogger(LoggerInterface $logger) {
        $this->logger = $logger;
    }
}

我发现比使用特征更好的主要原因是,通过消除与特征的硬耦合,您的代码更加灵活。例如,您现在可以简单地传递另一个记录器类。这使您的代码可重用和可测试。



 类似资料:
  • PHP 是一门复杂的语言,经过多年折腾,使其不同版本之间高度不一致,有时还有些 bug。每个版本都有自己独有的特性、多余和怪异之处,也很难跟踪哪个版本有哪些问题。

  • 问题内容: 伙计们,有人可以举一个&的简单实用示例吗?javadocs中给出的示例非常繁琐。 我理解许可证的使用。 感谢您的任何回复。 问题答案: 如果您要谈论使用锁定机制(甚至同步屏障),请使用。明显的建议是向代表的用户a 。同步是一个AQS,它依次使用。 一切都在您的幕后完成。 编辑: 我们不讨论(AQS)的实际用途。 尽管并发构造的用法可能非常不同,但它们都可以具有相同的基础功能。 即在某些

  • 问题内容: 我知道调用类的实例时会触发类中的方法。但是,我不知道何时可以使用此特殊方法,因为一个人可以简单地创建一个新方法并执行在方法中完成的相同操作,而无需调用实例,而可以调用该方法。 如果有人给我这种特殊方法的实际用法,我将不胜感激。 问题答案: Django表单模块很好地使用了方法来实现用于表单验证的一致API。您可以将自己的表单验证程序编写为Django中的函数。 Django有一些默认的

  • 问题内容: 即使将MySQL DB,表和字段的排序规则设置为utf8_general_ci,也经常发生将 é 等字符转换为 é的情况 。页面的 Content-Type中 的编码也设置为UTF8。 我知道utf8_encode / decode,但是我不确定在哪里以及如何使用它。 我已经阅读了“ 绝对是每个软件开发人员的绝对最低限度,肯定必须了解Unicode和字符集(无借口!) ”一文,但是我

  • 问题内容: 我正在尝试在PHP中创建类似CMS的系统。使它尽可能模块化和可扩展。 有人可以为我提供在PHP中创建事件侦听器系统(例如Drupal系统的非常简化的版本),创建钩子并在一个简短的示例中实现它们的最佳实践方案也很不错。 问题答案: 嗯,从实现角度看,确实有三种不同的方法可以做到这一点(请注意,这些是面向对象的设计模式,但是您可以根据需要在功能上或过程上实现它们)。 1.观察者模式 您可以

  • 我正在学习php中的面向对象编程,我在网上找到的所有例子都没有意义。像动物,自行车等例子对我来说没有意义,我需要现实生活中的日常例子,像验证,CRUD等。 有谁能给出一个实际生活中的日常OOP的php例子,或者建议一篇文章或教程,使我更好地理解OOP