【问题标题】:Should PHP use objects as basic data types?PHP 应该使用对象作为基本数据类型吗?
【发布时间】:2009-07-08 21:04:54
【问题描述】:

我最近想创建自己的 String 类,以便更轻松地使用 PHP 的函数。我写的不是strlen($str),而是$str->length()。更容易记住某些函数中的参数顺序,例如substr

我在上面运行了一些计时脚本,发现它比使用常规函数慢了大约 5 倍。我还没有在真正的应用程序中测试过这个,所以我不知道它会有多微不足道(1ms vs 5ms 还是 100ms vs 500ms?)。

无论如何,让我感到震惊的是,现在 PHP 现在更多地关注 OOP,难道字符串、数组和其他基本类型都不是面向对象的吗?然后他们可以更好地命名函数,代码会“感觉”更好。并慢慢淘汰旧的做事方式。这有什么优点/缺点?

【问题讨论】:

    标签: php oop class


    【解决方案1】:

    您可以随时记录您的代码并只使用 PHP 提供的函数。从长远来看,很难说它是否会影响你。有许多不同的因素可以影响这一点。试一试吧,如果不行,就换回原来的方式。

    就我个人而言,我只会把我的文档记录好,而不是太花哨。如果你想推动更多的 OOP,你最好的选择是研究一个框架。

    我希望 PHP 从一开始就让它变得如此简单。代码看起来很整洁。

    【讨论】:

    • 如果使用框架仍然无法满足您的需求,那么可能是时候研究另一种语言了,尤其是真正面向对象的语言。
    【解决方案2】:

    我认为它会很好,但它不再是 PHP...

    【讨论】:

      【解决方案3】:

      当然,$somestring->length() 很好,但另一方面,你必须在创建字符串时使用$somestring = new String('asdf...'),然后不断地将字符串转换为字符串,反之亦然。从长远来看,您最终可能会让事情变得更难编写和维护。

      我并没有真正看到 PHP 语言会以这种方式发生变化——它会改变太多的基础语言。如果你想要一种这样的语言,你将不得不改变语言,而不是希望语言改变。

      【讨论】:

      • 现在这不正确。使用 __toString 魔术方法,字符串对象可以充当常规字符串。可以使用 ArrayAccess 接口对 Array 对象进行索引访问。我会做一些基准测试,看看这对性能有多大影响,会很整洁。
      【解决方案4】:

      我理解您为什么要这样做,但是在我看来,除了“让程序员更轻松”之外,什么都不做的库和抽象是浪费时间。它们很少有效率,它们很浮夸,甚至有点自命不凡。

      这是肯定的,PHP 有很多错误,但是如果您尝试在任何地方为它们发明变通方法,您将花费大量时间,而这些时间本可以花在其他地方更好。

      【讨论】:

        【解决方案5】:

        看看Stringy。它为您提供了大量有用的方法,让您在 PHP 中更轻松地处理特别是 UTF 编码的字符串:

        $stringy = S::create('Fòô', 'UTF-8');
        count($stringy);  // 3
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-20
          • 2012-01-12
          • 1970-01-01
          • 1970-01-01
          • 2022-01-11
          • 1970-01-01
          • 1970-01-01
          • 2012-05-29
          相关资源
          最近更新 更多