【问题标题】:Overloading the built-in type constructor in PHP [closed]在 PHP 中重载内置类型构造函数 [关闭]
【发布时间】:2012-03-11 06:57:54
【问题描述】:

我正在尝试这样,对于创建的每个 Integer,都会输出一些文本。为此,我希望重载(或扩展)默认的 Integer 类型。

我想要一个内置类型(整数、数组、字符串)来拥有一个自定义构造函数,例如

public function __construct($data) { print $data; }

这可能吗?在网上之前我什至都没有尝试过。

编辑:

我试过这个:

class Integer { /*...*/ }

还有这个:

class Integer extends Integer { /*...*/ }

【问题讨论】:

  • 默认的整数和字符串类型在 PHP 中是没有对象的。因此没有超载。是什么让你认为他们是?
  • 没有什么必然会让我认为它们是对象,当我将它们视为对象时更容易解释我想要什么,因为我想对它们做什么,我可以对一个对象做什么。
  • 好吧,您可以围绕它们编写包装器并使用它们而不是使用本机整数和字符串类型,但这真的有必要吗?性能下降只是其中一个缺点。
  • 这是不可能的。正如我所说,它们在 PHP 本身中不是对象,因此您不能扩展和重载它们。您想要的是两全其美:本地访问并期望它成为您的自定义类。即使它们是不可能的对象,因为您必须创建一个新的 MyInteger(5) 实例才能实际使用您自己的代码。
  • 否...您应该使用调试器来调试...

标签: php types constructor overloading


【解决方案1】:

由于 PHP 原生标量类型不是对象,因此不能重载它们。
您可以编写包装类并像这样使用它们:

$int = new Integer(5);

但这可能比有意义的工作要多得多。

【讨论】:

  • 是的,它只是没有我想要调用构造函数的功能:$x=5;
  • 是的,那么 PHP 不是适合您的语言。 :-P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多