我想将所有字符串和数组用作我们可以添加函数的对象。
<?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类。
答案 0 :(得分:1)
有趣的想法。由于原型方法,类似于JavaScript的String函数/对象/构造函数。我过去做过类似的事情,并没有任何记忆或性能问题。您可能希望利用__toString()
(我看到您已经在做)等神奇方法,以及__call()
和__callStatic()
。添加implements Serializable
也是一个好主意。有一些聪明,你可以有一个非常实用的类。虽然我很快就会使用字符串文字,因为这样的实现并不能真正提供任何功能。但是如果你能想到一个有用的实现,也许是为了构建某种JavaScript引擎,你可以从最顶级的类JSObject
开始,然后将你的类重命名为JSString
并扩展它,还有JSArray
和JSDate
等等。如果您可以在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)
不,它不会消耗太多内存。此外,您不会遇到任何性能问题,而不是在您的应用程序中重复使用。