2015-10-29 24 views
2

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

<?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. 我会遇到任何性能问题吗?
+0

如果你想这样写你的代码没有任何问题。但是,这是一个基于意见的问题,并不属于SO。 – naomik

回答

1

有趣的想法。由于原型方法,类似于JavaScript的String函数/对象/构造函数。我过去做过类似的事情,没有任何内存或性能问题。您可能想要利用诸如__toString()(我认为您已经在做)以及__call()__callStatic()等魔术方法。另外一个好主意,加上implements Serializable。随着一些聪明,你可以有一个漂亮的功能类。虽然我会尽早使用字符串文字,因为这样的实现不会真正提供任何功能明智的。但是如果你能想出一个有用的实现方案,或许可以构建某种JavaScript引擎,那么你可以从最顶级的类别开始,也许JSObject,然后重新命名你的类可能JSString并扩展它,也有JSArray和​​等。如果你可以在PHP中实现类似JavaScript的环境,继承和全部,我会感兴趣。听起来像是一个有趣的侧面项目,但我真的无法想到它的实际用法。但是为了扩展您的PHP知识并掌握它,我认为这是一个很好的学习机会,可以亲身体验PHP的局限性。将PHP的限制推到极限,你可能会学到一些东西。如果你决定走这条路线,还有另外两种魔法可以让你玩得开心。 __get()__set()。通过这种方式,您可以调用$myString->length$myObject->key="value",并将其存储到内部数组中,以便您可以在数据发生变化时轻松对数据执行预处理。只要确定定义__isset()方法(如果您决定定义动态属性。另请参见:http://php.net/manual/en/reserved.interfaces.php

编辑:
也许一个有用的执行是定义一个层次结构的能力,例如有多少网站有管理类别/子类别和产品在每个类别的数量。这样的实现将允许您轻松定义这样的层次结构,而不必担心儿童或儿童或孙辈的数量等等。但是即使如此,由于我更早使用递归函数来遍历这样的层次结构,所以不太实际。也许更实际的实现是某种HTML解析器。但这是重新发明轮子,虽然是好的做法。但我知道的是,许多PHP框架利用上述功能来实现MVC环境。因此,如果您认为您可以构建比现有架构更好的框架或针对编码人员的其他相关环境,那么这也许是上述功能的最实际实施。

+0

我已经完成了你所定义的所有事情。即使我已经在数组迭代器中添加了此字符串对象的键和值,我还写了使用(PDO :: FETCH_CLASS)中的自定义PHP PDO类将所有字符串和数组转换为str对象,然后使用。 我只有一个疑问会消耗更多的内存吗? –

+0

Nah,像PHP这样的弱类型语言在垃圾收集方面相当不错。但是如果你对记忆很在意,也许像PHP这样的弱类型语言对你来说不太合适。只要你不处理海量数据就没关系。如果你最终使用海量数据,那么内存将是一个问题,你不应该依赖任何快捷方式。你可以通过检查来监控代码:http://php.net/manual/en/function.memory-get-usage.php – Ultimater

-1

不,它不会消耗太多的内存。同时,你不会得到任何性能问题,而不是在应用程序中重复使用。

+0

你可能想要利用诸如__toString()(我看到你已经在做)以及__call()和__callStatic()这样的魔术方法。另外一个好主意是添加实现Serializable。随着一些聪明,你可以有一个漂亮的功能类。虽然我会尽早使用字符串文字,因为这样的实现不会真正提供任何功能明智的。 – ankit