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

z9ju0rcb  于 2023-05-16  发布在  PHP
关注(0)|答案(7)|浏览(114)

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

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

j8yoct9x1#

看看这个。。
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

?>

我以前从未使用过这个类,但通过查看它的文档,它有一些非常有趣的方法。capitalize、charAt、compareTo、contains等。

5tmbdcev

5tmbdcev2#

我有点晚了,但我正在寻找一个像这样的库,遇到了这个问题。经过更多的调查,我在GitHub上找到了danielstjules/Stringy
我已经看过了文档和源代码,它看起来非常可靠。如果你想要一个PHP String Wrapper类来使字符串操作更容易,我建议你看看。请注意,这段代码不是PHP扩展,这意味着没有本机操作,它只是一个 Package 器。

一个支持多字节的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
4dc9hkyq

4dc9hkyq3#

如果你愿意,你可以创建你自己的String Package 类,它拥有你可能需要的所有基于字符串的方法和计算属性。编辑:就像Java为某些数据类型提供了 Package 类一样。

x7yiwoj4

x7yiwoj44#

虽然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
mdfafbf1

mdfafbf15#

SplString但它在PHP 5.3中还不可用。我怀疑它的用处,如果它来了,因为它没有任何有用的方法。也许有人可以在上面建造。但这只是针对字符串。PHP是建立在标量之上的,目前还不可能完全面向对象地使用它。

uwopmtnx

uwopmtnx6#

现在是2014年,SplString仍然不是PHP中的默认值。我会看一下
https://github.com/nikic/scalar_objects
这是一个扩展,所以你必须安装它。

au9on6nz

au9on6nz7#

我知道这是一个非常古老的问题,但我认为它仍然有效。
根据我的研究,我认为danielstjules/Stringy是最好的替代方案,但从我所看到的,它不是积极支持。从其中一个问题中,我发现了一个支持的副本,似乎也有PHP 8返回类型,并且与最新的PHP版本更新,即voku/Stringy(GitHub)或voku/stringy(Packagist)
来自lib Stringy自述文件:
一个支持多字节的PHP字符串操作库。兼容PHP 7+
100%兼容原始的“Stringy”库,但此分支针对性能进行了优化,并使用PHP 7+功能。
感谢Lars Moelleken的支持。

相关问题