Php 是否有一个与uu toString()等价的整数

Php 是否有一个与uu toString()等价的整数,php,Php,有没有办法告诉PHP如何将对象转换为int?理想情况下,它看起来像 class ExampleClass { ... public function __toString() { return $this->getName(); } public function __toInt() { return $this->getId(); } } 我意识到这种形式不支持它,但有没有一种简单(不太粗

有没有办法告诉PHP如何将对象转换为int?理想情况下,它看起来像

class ExampleClass
{
    ...

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

    public function __toInt()
    {
        return $this->getId();
    }
}
我意识到这种形式不支持它,但有没有一种简单(不太粗糙)的解决方法

----------------------编辑编辑编辑-----------------------------

谢谢大家!我研究这个的主要原因是我想让一些类(表单生成器、菜单类等)使用对象而不是数组(uniqueId=>description)。如果您决定它们应该只处理那些对象,或者只处理扩展某种通用对象超类的对象,那么这就足够简单了

但我想看看是否有中间道路:理想情况下,我的框架类可以接受整数字符串对,或者使用getId()和getDescription()方法的对象。因为在我想使用stackoverflow的综合知识来找出是否有一种标准/最佳实践方法可以做到这一点,而不会与php标准库、通用框架等发生冲突之前,其他人肯定已经想到了这一点


\uu toInt()
没有。

恐怕没有这样的事情。我不确定你为什么需要这个,但是考虑下面的选项:

添加
toInt()
方法,在类中强制转换。你可能已经意识到了这一点

public function toInt()
{
    return (int) $this->__toString();
}
在类外重复施法,将导致int

$int = (int) (string) $class;
在类外创建一个特殊函数:

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

当然,
\uu toString()
方法可以返回一个包含数字的字符串:
返回“123”
。类之外的用法可能会自动将此字符串转换为整数。

使对象实现ArrayAccess和迭代器

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) {
        // ....
    }
}
您可以使用重新键入:

class Num
{
    private $num;

    public function __construct($num)
    {
        $this->num = $num;
    }

    public function __toString()
    {
        return (string) $this->num;
    }
}

$n1 = new Num(5);
$n2 = new Num(10);

$n3 = (int) (string) $n1 + (int) (string) $n2; // 15

我认为你误解了这个问题;)是否有一个整数等价于
\uuu toString()
@Felix,我确实读错了,在你回答之前几秒钟我编辑了我的答案:)谢谢。谢谢你的时间!我知道uuu-toInt()不存在,这就是我要求解决问题的原因。这似乎是几乎正确的答案,也许它应该说“既不是
uu-toInt()
也不是
u-toInt()
,或者任何类似的东西都不存在”。我认为这对非OP受众/观众来说是一个更好的答案。我不确定PHP如何知道区别__toString()用于直接输出对象,而不仅仅是类型转换。您可以像在Java中一样创建一个“object”类,并从中派生所有内容,然后实现一个可重写的方法。@Phil幸运的是,我使用的是5.3,所以我不再有这个问题:)一种可能的情况是将对象与int:if($myPseudoInt>1)进行比较-这导致一个通知a la:“类PseudoInt的对象无法转换为int”。如果使用一个u_toInt()-方法来允许在没有显式铸件的情况下进行这样的比较,那会很好。我们仍在等待,但也许有一天:谢谢!我之所以要研究这个问题,是因为我想让一些类(表单生成器、菜单类等)使用对象而不是数组(uniqueId=>description),但不具体地使它们适应这些对象(失去通用性),也不引入一个总体对象类(失去通用性+需要调整的大量代码)。我希望能找到某种中介解决方案。这就是接口的用途,对吗?spl\u object\u hash()为每个对象返回一个唯一的id。好问题,亲爱的!但是这些ID会随着请求的不同而变化,没有?
spl\u object\u hash()
会在每个新请求中返回一个随机的hash。哦,好吧。谢谢你帮助大家!