php中的模块概念类似于Ruby

时间:2011-03-23 12:09:14

标签: php ruby

在php中是否有与ruby 模块构造类似的东西?

基本上我需要为混合黑白不同的类等创建模块。

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

1 个答案:

答案 0 :(得分:10)

PHP没有像Ruby那样使用mixin。也就是说,在定义类之后,您无法更改类的任何内容,并且在创建 1 之后,您无法在实例中添加新方法。 PHP only 在5.4中具有普通的旧的vanilla单继承机制,接口和composing traits

PHP可能与Ruby模块最接近的是一个类。 PHP可能与Ruby mixin最接近的是一个特征,但特征是动态。在定义类时,它们必须由任何实现类引用。它们不能在运行时添加或修改,而是作为一个整体应用于类,而不是单个实例。

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

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