Действительно ли возможно перегрузить операторы в PHP?

Можете ли вы выйти из: productCode? Вполне возможно, что значение не соответствует вашим ожиданиям, и удаление несуществующего элемента с радостью ничего не сообщит, если совпадение не найдено.

62
задан systemovich 29 March 2016 в 08:57
поделиться

4 ответа

Если вы используете PHP5 (и так и должно быть), взгляните на классы SPL ArrayObject . Документация не слишком хорошая, но я думаю, что если вы расширите ArrayObject, у вас будет ваш «поддельный» массив.

РЕДАКТИРОВАТЬ: Вот мой быстрый пример; Боюсь, у меня нет ценного варианта использования:

class a extends ArrayObject {
    public function offsetSet($i, $v) {
        echo 'appending ' . $v;
        parent::offsetSet($i, $v);
    }
}

$a = new a;
$a[] = 1;
53
ответ дан 24 November 2019 в 16:47
поделиться

PHP's concept of overloading and operators (see Overloading, and Array Operators) is not like C++'s concept. I don't believe it is possible to overload operators such as +, -, [], etc.

Possible Solutions

21
ответ дан 24 November 2019 в 16:47
поделиться

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

2
ответ дан 24 November 2019 в 16:47
поделиться

Проще говоря, нет; и я полагаю, что если вы считаете, что вам нужна перегрузка в стиле C ++, вам, возможно, придется переосмыслить решение вашей проблемы. Или, возможно, подумайте о том, чтобы не использовать PHP.

Перефразируя Джейми Завински: «У вас проблема и вы думаете:« Я знаю! Я буду использовать перегрузку операторов! » Теперь у вас две проблемы. "

Я полагаю, что если вы считаете, что вам нужна перегрузка в стиле C ++, вам, возможно, придется переосмыслить решение вашей проблемы. Или, возможно, подумайте о том, чтобы не использовать PHP.

Перефразируя Джейми Завински: «У вас проблема и вы думаете:« Я знаю! Я буду использовать перегрузку операторов! » Теперь у вас две проблемы. "

Я полагаю, что если вы считаете, что вам нужна перегрузка в стиле C ++, вам, возможно, придется переосмыслить решение вашей проблемы. Или, возможно, подумайте о том, чтобы не использовать PHP.

Перефразируя Джейми Завински: «У вас проблема и вы думаете:« Я знаю! Я буду использовать перегрузку операторов! » Теперь у вас две проблемы. "

0
ответ дан 24 November 2019 в 16:47
поделиться
Другие вопросы по тегам:

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