是否存在等效于 __toString() 的整数

php
2022-08-30 15:21:31

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

class ExampleClass
{
    ...

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

    public function __toInt()
    {
        return $this->getId();
    }
}

我意识到它不以这种确切的形式受支持,但是有没有一种简单(不那么黑客)的解决方法?

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

谢谢大家!我正在研究这个问题的主要原因是我想让一些类(表单生成器,菜单类等)使用对象而不是数组(uniqueId = >描述)。如果您决定它们应该只与这些对象一起使用,或者只与扩展某种泛型对象超类的对象一起使用,这很容易。

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


答案 1

恐怕没有这样的事情。我不完全确定您需要它的原因是什么,但请考虑以下选项:

添加一个方法,在类中强制转换。您可能已经意识到了这一点。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'


答案 2

让你的对象实现 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) {
        // ....
    }
}

推荐