Php 函数用于在强制转换对象时返回特定值的对象

Php 函数用于在强制转换对象时返回特定值的对象,php,oop,object,Php,Oop,Object,首先,我很抱歉这个问题太模糊了。我不记得这叫什么,也不记得它们是如何工作的,所以很难开始搜索或制定一个好的标题 我有两个问题,一个是: 第一: 对象如何在内部转换为其他类型?这叫什么 例如: $Obj{ $value = 1; $other = 2; $more = 3; } $myObj = (string)$Obj; print $myObj; // prints "1, 2, 3" or something like that $Obj{ $v

首先,我很抱歉这个问题太模糊了。我不记得这叫什么,也不记得它们是如何工作的,所以很难开始搜索或制定一个好的标题

我有两个问题,一个是:

第一: 对象如何在内部转换为其他类型?这叫什么

例如:

$Obj{
    $value = 1;
    $other = 2;
    $more = 3;
}

$myObj = (string)$Obj;

print $myObj; // prints "1, 2, 3" or something like that
$Obj{
        $value = 1;
        $other = 2;
        $more = 3;
    }

$result = 4 / $Obj;

print $result; // prints ".66666667" or something similar (sum of all properties)
第二: 这个方法能用于数学吗?在数学中使用对象时,是否有一些覆盖函数可以识别

例如:

$Obj{
    $value = 1;
    $other = 2;
    $more = 3;
}

$myObj = (string)$Obj;

print $myObj; // prints "1, 2, 3" or something like that
$Obj{
        $value = 1;
        $other = 2;
        $more = 3;
    }

$result = 4 / $Obj;

print $result; // prints ".66666667" or something similar (sum of all properties)
更新: 我认为这可能与此有关,但我知道我听说过这样一种情况,即不必调用
serialize()
,而是“自动”完成,以一种不实际序列化整个对象的方式完成,它只是将其转换为一个可用值,如我上面的示例所示

最终:
感谢@trey对它的解释是正确的,@webbiedave为我指出了神奇的方法。

当你将一个对象更改为不同的数据类型时,它被称为类型转换,至于第二部分,我不完全确定我是否理解你,你是在数学函数中尝试类型转换吗

听起来,这可能更符合您的需求:

class User
{
  public $first_name='John';
  public $last_name='Smith';

  public function __toString()
  {
    return "User [first='$this->first_name', last='$this->last_name']";
  }
}
 $user=new User;
 print '<span>'.$user.'</span>';
类用户
{
公共$first_name='John';
公共$last_name='Smith';
公共函数
{
返回“User[first='$this->first_name',last='$this->last_name']”;
}
}
$user=新用户;
打印“.$user.”;

但我找不到有关如何在对象转换为整数时使其工作的文档。。。如果我这样做,我将更新它是强制转换,因为您可以定义魔术方法,允许对象按需要强制转换为字符串,然后允许PHP在数学中将其强制转换为int或float

以以下为例:

class A
{
    public $value = 1;
    public $other = 2;
    public $more  = 3;

    public function __toString()
    {
        return (string)($this->value + $this->other + $this->more);
    }
}

$obj = new A();
echo 4 / (string)$obj; // outputs 0.66666666666667 

不,不是打字。对象有一个特殊属性,允许它们以这种方式使用时返回有意义的值。如果你只是在没有这个特殊覆盖的情况下键入一个对象,它要么返回一个错误,要么返回一个没有帮助的结果(比如:
(string)$Obj==Object(5)
或其他什么)。hmmm类型的杂耍是我能想到的最接近于你在内部转换过程中询问的内容的事情,让我看看我能想出什么特别行动谢谢你的帮助。看来你选角是对的。我可以发誓有一种方法不需要手动将其转换为(字符串):)我会给@webbiedave答案,但你确实很有帮助,我感谢你花了这么多时间!编辑:我想象整数转换就是
parseInt((字符串)$Obj)。另一方面,php是松散类型的,因此,如果
\uuuuuToString
返回的是一个“类”数字,那么它可能在没有显式解析的情况下工作:)因此我假设最好实际返回一个字符串(给定名称),但是
\uuuToString()
理论上可以返回任何东西吗?是否有更通用的函数可以捕获任何强制转换?必须返回字符串,否则将导致致命错误。PHP不提供其他类型的魔术施法。我迟到了,信息不错,我不会继续寻找其他魔术方法;)