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? Я думал об и самое близкое, к которому я мог подойти, __, разрушают метод. но не было никакого возможного способа знать, как это уничтожалось. Это возможно, или я трачу впустую свое время?
Поскольку PHP слабо типизирован, нет естественного класса строк, потому что естественный способ использования строк - это, ну, просто их использование. Однако, начиная с PHP5.3, в SPL появилось расширение, обеспечивающее сильно типизированные скаляры:
Однако, имейте в виду, что это расширение является экспериментальным и может быть изменено. На данный момент оно также недоступно для Windows.
Вы также можете попробовать https://github.com/nikic/scalar_objects
Это расширение реализует возможность регистрации класса, который обрабатывает вызовы методов к определенному примитивному типу (строка, массив, ...). Как таковой он позволяет реализовать API типа $str->length().
Боюсь вам сказать, что ни с одним из них вам не повезет.
$ str = new Str 'hello kitty';
приведет к фатальной ошибке, и, хотя второй метод действителен, он не выполняет то, что вы намереваетесь, а скорее переназначает собственную строку.
Могу я спросить, почему вы хотите иметь оболочку вокруг собственного типа?
Почему вам это не кажется естественным? То же самое и в Java.
Вы можете найти это полезным: