459 / 367 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
1

Преобразование типов для объекта

25.12.2014, 16:10. Показов 702. Ответов 4
Метки нет (Все метки)

Доброго времени суток.
Хотелось бы услышать ответ на вопрос о преобразовании типов для объектов.

Например, имеем объект, класса Natural. При помощи замечательного метода __toString() мы можем представить этот объект в виде строки.
По этой аналогии хочу предствить объект в виде целого числа, но увы, такого метода как __toInteger() к сожалению нету...
Зачем это нужно? Например, мой класс реализует объекты, представляющие собой положительные целые числа. У них есть метод get(), который позволяет получить их значения. Допустим, я хочу сложить два таких объекта, а результат присвоить посторонней переменной. Следующий код будет работать:
PHP
1
2
3
4
5
6
$a = new Natural(4);
$b = new Natural(5);
 
$result = $a->get() + $b->get();
 
echo $result; //Выведет 9
Следующий же код, работать не будет, хотя выглядит он красивее:
PHP
1
2
3
4
5
6
$a = new Natural(4);
$b = new Natural(5);
 
$result = $a + $b;
 
echo $result;
Здесь php ругается на то, что объекты $a и $b не могут быть преобразованы в целочисленный тип. Вот тут я и подумал о том, что может имеется какой-нибудь волшебный метод, типа __toInteger(), но увы я ничего не нашел.

Вопрос: можноли таки преобразовать объект в целое число, и если да, то как?

Заранее пасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.12.2014, 16:10
Ответы с готовыми решениями:

Преобразование пользовательских типов, ссылка на объект не указывает на экземпляр объекта
Всем привет, в C# недавно, объясните пожалуйста почему так выходит. У нас есть некоторый класс ...

Как осуществляется преобразование типов (для чего)?
Как осуществляется преобразование типов (для чего)? int *p=(int*)str; // ругается на p ...

Для чего в приведенном коде используется преобразование типов
if (choose==7){ printf ("Проверим составное или простое число при k=18\n"); k=18; ...

Динамическое изменение типа объекта (для обобщённых типов)
Здравствуйте, проблема в следующем: есть класс с generic: public class Entity { ...

4
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
27.12.2014, 14:07 2
Такое в PHP сделать нельзя.

Точнее можно, но через очень хардкорные хаки, которые потребуют уйму специфических навыков и будут оправданы только внутри какого-нибудь специфического фреймворка, например как AspectMock.
1
70 / 70 / 13
Регистрация: 01.09.2011
Сообщений: 379
15.01.2015, 14:00 3
можно сделать почти красиво
PHP
1
$a() + $b();
и реализовать __invoke()
1
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
15.01.2015, 14:29 4
Можно, но зачем. В пхп отсутствует тип int. Его просто нет. is_int это лишь проверка можно ли как целое значение использовать. Взялись использовать язык состоящий из костылей - удивляться ничему не нужно
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
17.01.2015, 08:48 5
Цитата Сообщение от ads Посмотреть сообщение
Можно, но зачем. В пхп отсутствует тип int. Его просто нет.
Не надо врать. Есть такой тип: http://php.net/manual/en/langu... nteger.php

И последние годы делают много, чтобы убрать эти костыли.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.01.2015, 08:48
Помогаю со студенческими работами здесь

Преобразование типов double в int для задания размерности массива
Объясните, пожалуйста. Не объявляется массив, хотя его размеры объявил как константы. // #ifndef...

Преобразование типов для копирования определенных ячеек из одного столбца в массив
Доброго времени суток. Есть таблица в экселе. Цель - скопировать определенные ячейки из одного...

Преобразование типов
Кто знает, как преобразовать double в std::string (можно в несколько этапов)?

Преобразование типов
С клавиатуры вводятся целые числа и вещественные в форме с фиксированной точкой. Признак конца...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru