Как сделать естественный Строковый класс в PHP

Hai. Я делал этот класс простой строки и задавался вопросом, был ли более естественный способ сделать его.

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??

Во втором методе, там способ, которым я мог возможно поймать тот переменный набор резкого звука снова и вместо того, чтобы сбросить его, установить это на ул.:: $value? Я думал об и самое близкое, к которому я мог подойти, __, разрушают метод. но не было никакого возможного способа знать, как это уничтожалось. Это возможно, или я трачу впустую свое время?

7
задан sepehr 6 March 2010 в 12:03
поделиться

3 ответа

Поскольку PHP слабо типизирован, нет естественного класса строк, потому что естественный способ использования строк - это, ну, просто их использование. Однако, начиная с PHP5.3, в SPL появилось расширение, обеспечивающее сильно типизированные скаляры:

Однако, имейте в виду, что это расширение является экспериментальным и может быть изменено. На данный момент оно также недоступно для Windows.

Вы также можете попробовать https://github.com/nikic/scalar_objects

Это расширение реализует возможность регистрации класса, который обрабатывает вызовы методов к определенному примитивному типу (строка, массив, ...). Как таковой он позволяет реализовать API типа $str->length().

8
ответ дан 6 December 2019 в 19:36
поделиться

Боюсь вам сказать, что ни с одним из них вам не повезет.
$ str = new Str 'hello kitty'; приведет к фатальной ошибке, и, хотя второй метод действителен, он не выполняет то, что вы намереваетесь, а скорее переназначает собственную строку.

Могу я спросить, почему вы хотите иметь оболочку вокруг собственного типа?

0
ответ дан 6 December 2019 в 19:36
поделиться
  1. Невозможно вызывать функции в PHP без скобок.
  2. Ваш следующий метод изменит ссылку на строку.

Почему вам это не кажется естественным? То же самое и в Java.

Вы можете найти это полезным:

php-string

2
ответ дан 6 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: