我有这段代码:
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
有什么想法吗?
答案 0 :(得分: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;
答案 1 :(得分:0)
访问属性的表示法是$obj->prop
。那是->
后面没有$
。这在课堂内外使用。
.
是字符串连接运算符。
加上其他一些小修正应该会给你:
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
内的$l
和int64::int64()
变量仍然存在问题。那些应该来自哪里?
答案 2 :(得分:0)
您需要的只是clone:创建具有完全复制属性的对象的副本并不总是想要的行为。
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 ;