SerJook
@SerJook
кодер

Почему в PHP строки и массивы не являются объектами?

С чем это связано?

Я бы хотел писать:
$var = new string("hello world");
echo $var->length();
echo $var->substr(0,5);


Я пишу в шторме $var-> и мне среда не показывает никаких вариантов продолжения. Есть только какой-то несогласованный набор функций для работы с массивами и строками, которые трудно запомнить.

Есть ли библиотеки, содержащие ООП-варианты строк и массивов?
Есть ли в планах разработчиков языка добавить их в стандарт языка?
  • Вопрос задан
  • 2433 просмотра
Решения вопроса 2
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
От Никиты Попова (разраб из core team языка) есть библиотечка в виде php-extension:
Extension
Пример имплементации

Не видел распространения такого в языке PHP вообще никогда, но сейчас пишу на Python и мне очень нравятся скалярные объекты.
Одно точно — не все используют PHP в ООП стиле, хотя он уже де-факто доминирует в промышленной разработке на этом языке

Обсуждение на Reddit: https://www.reddit.com/r/PHP/comments/2xmawu/are_s...

UPD: В опросе того, что хотят увидеть в PHP 8 год назад, скалярные объекты заняли 4 место с неплохим результатом: https://blog.nikolaposa.in.rs/2018/09/23/community...
may be...
Ответ написан
DevMan
@DevMan
потому что есть языки где всё объекты, включая примитивы, и есть другие. пых относится ко вторым.

менять, по крайней мере в обозримом будущем, вряд ли будут по причине, мать ее, пресловутой обратной совместимости. из-за которой многие косяки тянутся уже десятилетиями.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
profesor08
@profesor08 Куратор тега PHP
Сделай свою обертку, это не сложно, для начала внеси нужные тебе функции, потом дополняй по необходимости. В пхп есть все необходимое для этого.

class Str {
    
    private $string = "";
    
    public function __construct($string = "") {
        $this->string = strval($string);
    }
    
    public function __toString() {
        return $this->string;
    }
    
    public function length() {
        return mb_strlen($this->string);
    }
    
    public function substr($start, $length = null) {
        return new static(mb_substr($this->string, $start, $length));
    }
}

$string = new Str("qwertyuiop");

echo $string . "\n";
echo $string->length() . "\n";
echo $string->substr(-3) . "\n";
Ответ написан
php666
@php666
PHP-макака
Теоретически это легко сделать - создать такие обертки. Практически - по факту тебе придется поддерживать язык в языке. А так да - очень жаль, что этого нет. Вся ООПшность языка опрокидывается в парадокс..
Ответ написан
Комментировать
@Neverfan
В laravel есть хелперы для работы с массивами и строками, раньше они были в виде простых функций, а теперь это выпилили и сделали на объектах. Вообще идея правильная, сам бы хотел такое, это намного удобнее. В теории сделать такое очень просто.
Ответ написан
Комментировать
@russianlagman
Строки и массивы вполне себе могут быть объектами в PHP.
Для этого существуют:
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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