【发布时间】:2011-07-21 06:32:24
【问题描述】:
php 中是否有类似于 ruby module 构造的东西?
基本上我需要为混合 b/w 不同的类等创建一个模块。
我知道php有混合b/w不同类的概念,但不确定模块。
【问题讨论】:
-
看看这个讨论Abstract Classes and Interfaces的区别。
php 中是否有类似于 ruby module 构造的东西?
基本上我需要为混合 b/w 不同的类等创建一个模块。
我知道php有混合b/w不同类的概念,但不确定模块。
【问题讨论】:
PHP 不像 Ruby 那样拥有 mixin。也就是说,在定义类之后,您无法对其进行任何更改,并且在创建实例后,您无法明智地向实例添加新方法1。 PHP only 在 5.4 中具有普通的老式 vanilla 单继承机制、接口和 composing traits。
PHP 与 Ruby 模块最接近的可能是类。 PHP 最接近 Ruby mixin 的可能是 trait,但 trait 是 not 动态的。在定义类时,任何实现类都必须引用它们。它们不能在运行时添加或修改,并且适用于整个类,而不是单个实例。
虽然 PHP 5.3 有命名空间,但它们仅限于保存函数、类、常量、特征和接口,这意味着 您不能将变量定义为命名空间的一等成员。尝试这样做会导致它们被定义在根命名空间中,这肯定不是任何人想要的。此外,没有命名空间继承机制,只有命名空间引用机制。
1:虽然您可以在创建对象后通过简单地引用它们来添加实例变量(属性),但这被认为是一种不好的做法。属性也可以包含匿名函数,但以这种方式滥用属性来模拟添加方法也是不好的做法。
【讨论】: