Ton*_*nyG 0 php require include traits
我想理解为什么对 Traits 的讨论似乎从来不包括与 Require 的比较,而是总是与继承进行比较。
据我了解,Require 本质上与运行时的复制/粘贴相同,并且 Require_Once 确保代码不重复。特征通常也被称为与复制/粘贴几乎相同。
也就是说,Require 和 Include 可以在条件逻辑中使用,因此在某些情况下它们可以成为 Trait 的更好替代方案。Traits 具有多态性和其他理想的功能,而这些功能是严格复制代码所无法获得的。例如,能够抽象特征中的函数,然后选择性地在容器类中重写。
这两个“代码包含/导入”功能在范围方面具有相似的行为,例如 $this。
但一个明显的区别是 Include/Require 代码默认会进入 HTML 处理,并且 <?php 是可选的,具体取决于上下文,通过 Trait 我们知道代码必须是 PHP 并且必须以 <?php 为前缀。
所以对我来说,Trait 更像是一个更高级别的 OOP 工具,而 Require 是一个不了解 OOP 细节的语言级指令。然而,在许多情况下,使用 Require 代码似乎比使用 Trait 来包含相同的代码同样简单和有用。
我希望有人能够提供清晰的示例,其中将选择一个而不是另一个,以便更明显地应该使用哪一个。除了我所引用的内容之外,还有更多细节。我是否已经走在做出这些选择的正确道路上?比这更简单,还是更复杂?比较表将是理想的。
小智 5
你是正确的,特质是 OOP,而 require 不是,虽然我可以看到你是如何到达那里的(即两者都包含代码),但它们实际上根本不是为相同的用例而设计的。
\n虽然 require 实际上会拉入代码,但我几乎完全使用它,就像我在 C++ 中使用 \xe2\x80\x98include\xe2\x80\x99 (我的公司广泛使用这两者) \xe2\x80\x93 来拉入列表共同定义,并为子类拉入父类。一个特质,不会做这两件事。例如,您必须要求/包含特征文件才能在所需的类定义中使用它。
\n一个特征是 PHP\xe2\x80\x99s 绕过没有多重继承(如在 C++ 中)或 mixin(Java\xe2\x80\x99s \xe2\x80\x98fix\xe2\x80\x99 没有多重继承)的方法)。特征通常与接口配对,该接口包含在作为该特征的使用者的类中。
\n我\xe2\x80\x99广泛使用了特征(对于它们的使用有强有力的论据,但我喜欢它们),特别是通过反射,在类家族内部,尤其是跨类家族提供共同的行为。例如,在一个简单的情况下,我\xe2\x80\x99ve使用一个特征为不同的类\xe2\x80\x93提供\xe2\x80\x98to html\xe2\x80\x99功能,一个数据库镜像(RDBMS接口) ,一个平面文件镜像,我不想\xe2\x80\x99 强制它拥有一个公共基类。我认为没有合理的 OOP 方法可以通过需求来做到这一点。我认为洒水需要在类主体中使用条件逻辑来提供方法,尽管我猜你可以,但这将是非常糟糕的形式。如果我正在面试这样的程序员,我可能会就此停止。
\nTLDR \xe2\x80\x93 Traits 是 PHP OOP 方法(无双关语),用于提供跨类的通用方法,以避免人工共同祖先。需要引入定义和父类。
\n| 归档时间: |
|
| 查看次数: |
725 次 |
| 最近记录: |