Есть ли способ сказать 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()
– нет.