Существует ли целочисленный эквивалент __toString ()

Есть ли способ сказать PHP, как конвертировать ваши объекты в ints? В идеале это выглядело бы как

class ExampleClass { ... public function __toString() { return $this->getName(); } public function __toInt() { return $this->getId(); } } 

Я понимаю, что это не поддерживается в этой точной форме, но есть ли простой (не так-хаки) обходной путь?

———————- EDIT EDIT EDIT ————————- —-

Спасибо всем! Основная причина, по которой я смотрю на это, – это сделать некоторые классы (генераторы форм, классы меню и т. Д.) Использовать объекты вместо массивов (uniqueId => description). Это достаточно легко, если вы решите, что они должны работать только с этими объектами или только с объектами, которые расширяют какой-то общий суперкласс класса.

Но я пытаюсь понять, есть ли средняя дорога: в идеале мои классы инфраструктуры могут принимать пары целых строк или объекты с методами getId () и getDescription (). Поскольку это то, что должно было произойти с кем-то еще, прежде чем я хотел бы использовать комбинированные знания stackoverflow, чтобы узнать, есть ли стандартный / лучший способ для этого , который не сталкивается с стандартной библиотекой php, рамки и т . д.

Боюсь, что такого не бывает. Я не совсем уверен, зачем вам это нужно, но рассмотрите следующие варианты:

Добавление метода toInt (), кастинг в классе. Вы, наверное, уже знаете об этом.

 public function toInt() { return (int) $this->__toString(); } 

Двойное кастинг вне класса приведет к int.

 $int = (int) (string) $class; 

Сделайте специальную функцию вне класса:

 function intify($class) { return (int) (string) $class; } $int = intify($class); 

Конечно, метод __toString () может возвращать строку с номером в ней: return '123' . Использование вне класса может автоматически передать эту строку целому числу.

Сделайте объекты реализацией ArrayAccess и Iterator.

 class myObj implements ArrayAccess, Iterator { } $thing = new myObj(); $thing[$id] = $name; 

Затем в коде, который потребляет эти данные, вы можете использовать тот же самый код массива старого стиля, который у вас был раньше:

 // Here, $thing can be either an array or an instance of myObj function doSomething($thing) { foreach ($thing as $id => $name) { // .... } } 

__toString() существует как магический метод.

http://www.php.net/manual/en/language.oop5.magic.php#language.oop5.magic.tostring

__toInt() – нет.