上。我正在制作这个简单的字符串类,并且想知道是否有更自然的方法。
class Str{
function __construct($str){
$this->value = $str;
$this->length = strlen($str);
..
}
function __toString(){
return $this->value;
}
..
}
所以现在我必须像这样使用它:
$str = new Str('hello kitty');
echo $str;
但是用圆括号看起来并不那么“自然”。所以我想知道是否有类似这样或类似的东西。
$str = new Str 'hello kitty'; # I dont believe this is possible although this is preferred.
$str = new Str; # get rid of the construct param.
$str = 'value here'; #instead of resetting, set 'value here' to Str::$value??
在第二种方法中,有没有一种方法可以再次捕获变量bing set而不是重置它,将其设置为Str :: $ value?我已经考虑过了,我最接近的是__destruct方法。但没有办法知道它是如何被摧毁的。这可能还是我在浪费时间?
答案 0 :(得分:8)
由于PHP是松散类型的,因此没有自然字符串类,因为使用字符串的自然方式就是使用它们。但是,从PHP5.3开始,SPL中有一个扩展,提供强类型标量:
但是,请记住,此扩展程序标记为实验性的,可能会发生变化。截至目前,它在Windows上也不可用。
您可能还想尝试https://github.com/nikic/scalar_objects
此扩展实现了注册处理对某种基本类型(字符串,数组,...)的方法调用的类的能力。因此,它允许实现像$ str-> length()这样的API。
答案 1 :(得分:3)
另见:https://github.com/alecgorge/PHP-String-Class
一个好的字符串类
答案 2 :(得分:2)
为什么它看起来不自然?这与Java相同。
您可能会觉得这很有用:
答案 3 :(得分:0)
我害怕告诉你,两者都不会有运气
$str = new Str 'hello kitty';
将导致致命错误,虽然第二种方法有效,但它不会执行您想要的操作,而是重新分配本机字符串。
请问为什么你想要一个包装器araound是原生类型?