所有字符串和数组作为对象PHP

时间:2015-10-29 06:06:19

标签: php oop

我想将所有字符串和数组用作我们可以添加函数的对象。

<?php
// Str class
class Str {
    private $str;
    public function __construct($str) {
        $this->str = $str;
    }
    public function len() {
        return strlen($this->str);
    }
    public function md5() {
        return new static(md5($this->str));
    }
    public function __toString() {
        return $this->str;
    }
}

// to cast string into str object
function str($str) {
    return new Str($str);
}

// casting string to str object
$str = str("Hello World");

echo $str;
// output: Hello World
echo $str->len();
// output: 11
echo $str->md5()->md5();
// output double md5 of string 'Hello World'

我想知道在我的高端应用程序中实现它是否是一个好主意。我将使用我自己的自定义函数将所有字符串函数添加到此Str类。

  1. 会消耗太多内存吗?
  2. 我会遇到任何性能问题吗?

2 个答案:

答案 0 :(得分:1)

有趣的想法。由于原型方法,类似于JavaScript的String函数/对象/构造函数。我过去做过类似的事情,并没有任何记忆或性能问题。您可能希望利用__toString()(我看到您已经在做)等神奇方法,以及__call()__callStatic()。添加implements Serializable也是一个好主意。有一些聪明,你可以有一个非常实用的类。虽然我很快就会使用字符串文字,因为这样的实现并不能真正提供任何功能。但是如果你能想到一个有用的实现,也许是为了构建某种JavaScript引擎,你可以从最顶级的类JSObject开始,然后将你的类重命名为JSString并扩展它,还有JSArrayJSDate等等。如果您可以在PHP中实现类似JavaScript的环境,并使用继承,那么我感兴趣。听起来像是一个有趣的副项目,但我真的不能想到它的实际用法。但是在扩展PHP知识和掌握它方面,我认为这是一个很好的学习机会,可以自己了解PHP的局限性。将PHP的限制推到极限,你可能会学到一些东西。如果你决定走这条路,那么你可以通过另外两种神奇的方法获得乐趣。 __get()__set()。通过这种方式,您可以调用$myString->length$myObject->key="value"并将其存储到内部数组中,以便在数据发生变化时轻松对数据执行操作等。只需确保定义{ {1}}方法,如果您决定定义动态属性。另见:http://php.net/manual/en/reserved.interfaces.php

修改
也许一个有用的实现是定义层次结构的能力,例如有多少站点必须管理类别/子类别以及每个类别中的产品数量。这样的实现将允许您轻松定义这样的层次结构,而不必担心孩子或儿童或孙子等的数量等。但即便如此,也不是那么实用,因为我很快就会使用递归函数来走这样的层次结构结构体。也许更实际的实现将是某种类型的HTML解析器。但这是重新发明的轮子,虽然是良好的做法。但我所知道的是,许多PHP框架利用上述功能来实现__isset()环境。因此,如果您认为可以构建比现有框架更好的框架,或者针对编码器的其他相关环境,那么这可能是上述功能的最实用的实现。

答案 1 :(得分:-1)

不,它不会消耗太多内存。此外,您不会遇到任何性能问题,而不是在您的应用程序中重复使用。