有没有办法告诉PHP如何将对象转换为int?理想情况下它看起来像
class ExampleClass
{
...
public function __toString()
{
return $this->getName();
}
public function __toInt()
{
return $this->getId();
}
}
我意识到它不支持这种确切的形式,但有一个简单的(不那么hacky)解决方法吗?
----------------------编辑编辑编辑---------------------- -------
谢谢大家!我正在研究这个的主要原因是我想制作一些类(表单生成器,菜单类等)使用对象而不是数组(uniqueId => description)。如果您决定只应该使用这些对象,或者只使用扩展某种泛型对象超类的对象,这很容易。
但是我试图看看是否存在中间道路:理想情况下,我的框架类可以接受整数字符串对,或者接受带有getId()和getDescription()方法的对象。因为在我想使用stackoverflow的综合知识来确定是否有一种标准/最佳实践方法来执行此与php标准不冲突之前,这是其他人必定已经发生的事情图书馆,共同框架等。
答案 0 :(得分:8)
我担心没有这样的事情。我不确定你需要这个的原因是什么,但请考虑以下选项:
添加一个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'
。类外部的用法可能会自动将此字符串转换为整数。
答案 1 :(得分: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) {
// ....
}
}
答案 2 :(得分:0)
__toString()
作为一种神奇的方法存在。
http://www.php.net/manual/en/language.oop5.magic.php#language.oop5.magic.tostring
__toInt()
没有。
答案 3 :(得分:0)
您可以使用重新键入:
@api.constrains('name', 'state')
def _check_name(self):
for field in self:
if field.state == 'manual' and not field.name.startswith('x_'):
raise ValidationError(_("Custom fields must have a name that starts with 'x_' !"))
try:
models.check_pg_name(field.name)
except ValidationError:
msg = _("Field names can only contain characters, digits and underscores (up to 63).")
raise ValidationError(msg)