0

我有这个代码:

class int64(){
    var $h; var $l;
    function int64(){
        $this->$h=$h;
        $this->$l=$l;
    }
}

function int64copy($dst,$src){
    $dst.$h = $src.$h;
    $dst.$l = $src.$l;
}

在调用函数时int64copy它的说法Catchable Fatal Error: object of the class int64 could not be converted to string in line

任何的想法?

4

3 回答 3

2

您不能在对象上使用 doc 表示法 - 它试图连接对象,因此它调用 int64::__toString() - 它失败了。

编辑:更好的例子:

class int64 {

    public $h; 
    public $l;

    function __construct($h, $l) {
        $this->h = $h;
        $this->l = $l;
    }


    public function __toString()
    {
        return sprintf('h: %s, l: %s', $this->h, $this->l);
    }

}

$a = new int64(1, 2);
$b = clone $a;

echo $a;
于 2012-10-22T11:05:44.627 回答
0

访问属性的符号是$obj->prop. 那是 a->后面没有 a $。这在课堂内外都使用。

.是字符串连接运算符。

加上其他一些小修复应该会给你:

class int64 {

    public $h,
           $l;

    public function int64(){
        $this->h = $h;
        $this->l = $l;
    }

}

function int64copy($dst, $src){
    $dst->h = $src->h;
    $dst->l = $src->l;
}

$h里面的and$l变量仍然会有问题int64::int64()。那些应该来自哪里?

于 2012-10-22T11:13:31.320 回答
0

您所需要的只是克隆创建具有完全复制属性的对象的副本并不总是需要的行为。

class int64 {
    public $h;
    public $l;

    function __construct() {
    }
}

$src = new int64();
$src->h = "h";
$src->l = "l";

$dst = clone $src ;
echo $dst->h , " " , $dst->l ;
于 2012-10-22T11:15:18.157 回答