在 php 中是否有类似于 ruby module 构造的东西?
基本上我需要为混合黑白不同类等创建一个模块。
我知道 php 有混合 b/w 不同类的概念,但不确定模块。
最佳答案
PHP 没有像 Ruby 那样的混入。也就是说,类在定义后就无法更改,也无法在实例创建后正常添加新方法1。 PHP 仅 具有普通的老式单一继承机制、接口(interface)和composing traits。在 5.4。
PHP 可能拥有的最接近 Ruby 模块的东西是类。 PHP 可能具有的与 Ruby mixin 最接近的东西是特征,但特征不是动态的。它们必须在定义类时被任何实现类引用。它们不能在运行时添加或修改,并且应用于整个类,而不是单个实例。
虽然 PHP 5.3 有命名空间,但它们仅限于保存函数、类、常量、特征和接口(interface),这意味着您不能将变量定义为命名空间的一级成员。尝试这样做会导致它们被定义在根命名空间中,这肯定不是任何人想要的。此外,没有命名空间继承机制,只有命名空间引用机制。
1:虽然您可以在创建对象后通过简单地引用它们来添加实例变量(属性),但这被认为是一种不好的做法。属性也可以包含匿名函数,但以这种方式滥用属性来模拟添加方法也是不好的做法。
关于php - php中类似于Ruby的模块概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5405007/