【问题标题】:Concept of Modules in php similar to Rubyphp中模块的概念类似于Ruby
【发布时间】:2011-07-21 06:32:24
【问题描述】:

php 中是否有类似于 ruby​​ module 构造的东西?

基本上我需要为混合 b/w 不同的类等创建一个模块。

我知道php有混合b/w不同类的概念,但不确定模块。

【问题讨论】:

标签: php ruby


【解决方案1】:

PHP 不像 Ruby 那样拥有 mixin。也就是说,在定义类之后,您无法对其进行任何更改,并且在创建实例后,您无法明智地向实例添加新方法1。 PHP only 在 5.4 中具有普通的老式 vanilla 单继承机制、接口和 composing traits

PHP 与 Ruby 模块最接近的可能是类。 PHP 最接近 Ruby mixin 的可能是 trait,但 trait 是 not 动态的。在定义类时,任何实现类都必须引用它们。它们不能在运行时添加或修改,并且适用于整个类,而不是单个实例。

虽然 PHP 5.3 有命名空间,但它们仅限于保存函数、类、常量、特征和接口,这意味着 您不能将变量定义为命名空间的一等成员。尝试这样做会导致它们被定义在根命名空间中,这肯定不是任何人想要的。此外,没有命名空间继承机制,只有命名空间引用机制。

1:虽然您可以在创建对象后通过简单地引用它们来添加实例变量(属性),但这被认为是一种不好的做法。属性也可以包含匿名函数,但以这种方式滥用属性来模拟添加方法也是不好的做法。

【讨论】:

  • 我喜欢你的例子,但命名空间常量确实存在于 5.3 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
  • 2012-07-26
  • 2016-03-19
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多