当我运行以下代码时,我在行echo $attribute;
中收到错误
错误代码:“Catchable fatal error:类SomeShape的对象无法转换为字符串”:
这段代码有什么问题?
感谢。
<?php
class Shape
{
static public $width;
static public $height;
}
class SomeShape extends Shape
{
public function __construct()
{
$test=self::$width * self::$height;
echo $test;
return $test;
}
}
class SomeShape1 extends Shape
{
public function __construct()
{
return self::$height * self::$width * .5;
}
}
Shape::$width=60;
Shape::$height=5;
echo Shape::$height;
$attribute = new SomeShape;
echo $attribute;
$attribute1 = new SomeShape1;
echo $attribute1;
?>
答案 0 :(得分:1)
不要在构造函数中执行return
。
如果您想回显一个值,请尝试添加__toString()
函数(manual)
答案 1 :(得分:1)
你要做的是回显一个对象,它就像你在回显一个数组(最好是回显一个数组,因为回显一个对象引发了错误),而你应该做的就是访问它的属性或方法等。如果你想知道对象中的内容,你必须使用var_dump而不是echo。
简而言之,echo $属性是错误的。使用var_dump($ attribute)
答案 2 :(得分:1)
如果不实施__toString
方法,则无法回显对象。
或者你可以var_dump
对象:
var_dump($attribute);
但我认为你真正想做的更像是这样:
class Shape {
public $width;
public $height;
public function __construct($width, $height) {
$this->width = $width;
$this->height = $height;
}
}
class SomeShape extends Shape {
public function getArea() {
return $this->width * $this->height;
}
}
class SomeShape1 extends Shape {
public function getHalfArea() {
return $this->width * $this->height * .5;
}
}
$shape = new SomeShape(10, 20);
echo $shape->getArea();
$shape = new SomeShape1(10, 20);
echo $shape->getHalfArea();
答案 3 :(得分:0)
我找到的解决方案是:
我不想为类形状添加更多属性,但这可以解决我的问题。可能有更多类似的解决方案,我很乐意看到。但这是我的想法,我在课堂形状中定义“public $ attribute;”在SomeShape类中,我写了“public function __construct()”“$ this-&gt; attribute = self :: $ width * self :: $ height;”在主要范围内,我写了“echo $ object-&gt;属性。”
“;”
<?php
class Shape
{
static public $width;
static public $height;
public $attribute;
}
class SomeShape extends Shape
{
public function __construct()
{
$this->attribute=self::$width * self::$height;
}
}
class SomeShape1 extends Shape
{
public function __construct()
{
$this->attribute=self::$width * self::$height * .5;
}
}
Shape::$width=60;
Shape::$height=5;
$object = new SomeShape;
echo $object->attribute."<br />";
$object1 = new SomeShape1;
echo $object1->attribute;
?>