PHP中面向对象的字符串/数字?

时间:2010-12-12 19:51:50

标签: php oop

我在看Ruby,它有一个非常好的OO结构,不像PHP那样具有类似C的字符串函数。我想知道是否有一个扩展使字符串成为对象,所以你可以像这样使用它们:

$str = "sometext";
echo "len:" . $str->length; //would print 'len: 8'

6 个答案:

答案 0 :(得分:7)

看看这个......

http://code.google.com/p/php-string/downloads/detail?name=string.php&can=2&q=

该类支持扩展名mbstring和iconv,以及包PHP-UTF8。它为每种方法选择最佳可用功能。此外,它还提供了许多新方法。其中一些是:substringBetween,splice,startWith,endsWith和squeeze。也可以使用PHP内部函数或自定义函数来操作字符串。

示例代码:

<?php

include('string.php');

$str = new String('sometext');
echo $str->length; //prints 8
echo $str->getLength(); //prints 8

?>

我之前从未使用过这个类,但通过查看它的文档,它有一些非常有趣的方法。大写,charAt,compareTo,包含等。

答案 1 :(得分:2)

如果您愿意,可以创建自己的String包装器类,该类包含您可能想要的所有基于字符串的方法和计算属性。编辑:与Java具有某些数据类型的包装类的方式相同。

答案 2 :(得分:2)

我在比赛中有点迟了,但我正在寻找像这样的图书馆,并遇到了这个问题。经过更多的调查,我在GitHub找到了辉煌的danielstjules/Stringy

我查看了文档和来源,它看起来非常坚固。我建议你看一下你是否想要一个PHP String Wrapper类来简化字符串操作。请注意,此代码不是PHP扩展,这意味着没有本机操作,它只是一个包装器。

Stringy

  

具有多字节支持的PHP字符串操作库。兼容PHP 5.3 +,PHP 7和HHVM。

一些例子:

s('Upper Camel-Case')->upperCamelize(); // 'UpperCamelCase'
s('What are your plans today?')->truncate(19, '...'); // 'What are your pl...'
s('foo & bar')->containsAll(['foo', 'bar']); // true
s('Ο συγγραφέας είπε')->countSubstr('α'); // 2

答案 3 :(得分:1)

虽然Jose Vega为您的问题提出了一个很好的解决方案,但该方法存在一个很小的性能问题。我已经为此做了一个测试。虽然每种解决方案在实际应用中都表现良好,但存在差异。

编辑:无论如何,既然这不是Ruby,也不是Java,也不是Smalltalk,你最好使用提供的工具,而不是试图弯曲语言以满足你的期望。主要是出于性能原因(因为本机工具通常用C语言编写或者低级别以至于对性能影响很小,尽管并非总是如此),并且为了可读性:社区习惯于查看mb_strlen()或strlen() ,以及其他与字符串相关的函数。

以下是我用于基准测试的代码:

http://pastebin.com/Q4BfzQtj

结果:

====> Test run 0
And here are the results:
Test with {} = 0.00097203254699707
Test with strlen() = 0.0030488967895508
Test with mb_strlen() = 0.0031669139862061
Test with String1 object = 0.012485027313232
Test with String object = 0.036020040512085


====> Test run 1
Test with {} = 0.00095200538635254
Test with strlen() = 0.0029759407043457
Test with mb_strlen() = 0.0031669139862061
Test with String1 object = 0.012346982955933
Test with String object = 0.036028146743774


====> Test run 2
Test with {} = 0.0009617805480957
Test with strlen() = 0.0029959678649902
Test with mb_strlen() = 0.0031518936157227
Test with String1 object = 0.012416124343872
Test with String object = 0.037784099578857


====> Test run 3
Test with {} = 0.00081610679626465
Test with strlen() = 0.0025439262390137
Test with mb_strlen() = 0.0027410984039307
Test with String1 object = 0.010634183883667
Test with String object = 0.030903100967407


====> Test run 4
Test with {} = 0.00081205368041992
Test with strlen() = 0.0025379657745361
Test with mb_strlen() = 0.0027129650115967
Test with String1 object = 0.010583162307739
Test with String object = 0.031081914901733


====> Test run 5
Test with {} = 0.000823974609375
Test with strlen() = 0.0025639533996582
Test with mb_strlen() = 0.0026860237121582
Test with String1 object = 0.010586023330688
Test with String object = 0.030833959579468   

答案 4 :(得分:0)

SplString。但它尚未在PHP 5.3中提供。而且我怀疑它是否有用,因为它没有任何有用的方法。也许人们可以建立它。但那只是字符串。 PHP是基于标量构建的,目前无法完全使用面向对象。

答案 5 :(得分:0)

它的2014年和SplString在PHP中仍然不是默认的。我来看看:

https://github.com/nikic/scalar_objects

它是一个扩展程序,因此您必须安装它。