在用PHP创建自己的类时,我应该扩展stdClass吗?

在用PHP创建自己的类时,我应该扩展stdClass吗?,php,extend,stdclass,Php,Extend,Stdclass,虽然PHP中的类不需要显式扩展stdClass,但我想知道这样做是否有某种最佳实践或好处 声明类时是否应该扩展stdClass 有关参考信息,请参见和。NoStdClass为空,因此扩展它没有任何好处 你只是在你的uu类中浪费扩展 php --rc StdClass Class [ <internal:Core> class stdClass ] { - Constants [0] { } - Static properties [0] { } - Stat

虽然PHP中的类不需要显式扩展stdClass,但我想知道这样做是否有某种最佳实践或好处

声明类时是否应该扩展stdClass


有关参考信息,请参见和。

No
StdClass
为空,因此扩展它没有任何好处

你只是在你的
uu类中浪费
扩展

php --rc StdClass
Class [ <internal:Core> class stdClass ] {

  - Constants [0] {
  }

  - Static properties [0] {
  }

  - Static methods [0] {
  }

  - Properties [0] {
  }

  - Methods [0] {
  }
}
php--rc StdClass
类[类stdClass]{
-常数[0]{
}
-静态属性[0]{
}
-静态方法[0]{
}
-属性[0]{
}
-方法[0]{
}
}

扩展stdClass的唯一原因是满足这个类的typehint,但是,这样的typehint永远不应该被使用,因为这是一个没有实际意义的点。

扩展stdClass有一个有趣的用途:($object instanceof stdClass)将返回true,比is_object($object)快3倍。我们讨论的是1微秒的差异,但不幸的是,除非在整个项目中严格规定,否则它很容易变得不连贯,因此比帮助更令人困惑。事实上,我很失望地得知PHP类在默认情况下没有扩展stdClass。对我来说是有意义的。

没有。没有必要。也许在某个时候PHP会向stdclass添加一些有用的“实用程序”方法,您的派生对象也会突然拥有这些实用程序,但这不太可能。@MarcB我个人认为这很好。例如,一些伪运算符重载(使用
isEqual
isGreater
,等等),但要有效实现这些重载,类型需要自动派生
stdClass
。这并不能回答这个问题。要评论或要求作者澄清,请在他们的帖子下方留下评论。@BhavikAmbani:实际上,它提供了一个非常清晰、简洁和正确的答案。“不。我认为你最好在评论部分提到这一点,因为你似乎对此感到困惑,”BhavikAmbani,让我解释一下。我是在说一点。见鬼,我甚至在一个非问题上没有从这个非答案中得到任何代表。@BhavikAmbani:答案简短并不意味着它需要评论。自己阅读你的自动评论。他是“批评”还是“要求作者澄清”?不,他没有。在将自动评论粘贴到合法答案之前,请先了解答案和评论之间的区别。从stdClass扩展有一个好处。它只允许类具有开箱即用的动态属性。另一种实现方法是实现ArrayAccess和可数接口。@ArmanP。几乎所有PHP对象都可以具有动态属性,而无需执行任何特殊操作。防止这种情况发生的唯一方法是,如果对象实现了
\uuu get
\uu set
,并且您在那里抛出了一个异常。