0

当我运行下面的代码时,我在行echo $attribute; 中出现错误错误代码:“可捕获的致命错误:类 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;
?>
4

4 回答 4

1

不要return在构造函数中执行 a 。

如果要回显一个值,请尝试添加一个__toString()函数(手动

于 2012-05-07T09:38:14.367 回答
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();
于 2012-05-07T10:09:47.477 回答
1

你想要做的是回显一个对象,就像你在回显一个数组(比回显一个数组更糟糕,因为回显一个对象会引发错误),而你应该做的是访问它的属性或方法等。但是如果你想c 你的对象中有什么,你必须使用 var_dump 而不是 echo 。

简而言之,echo $attribute 是错误的。使用 var_dump($attribute)

于 2012-05-07T09:40:49.440 回答
0

我找到的解决方案是:我不想为类形状添加更多属性,但这解决了我希望的问题。可能有更多类似的解决方案我很乐意看到。但这是我在类形状“public $attribute;”中定义的想法 在 SomeShape 类中,我写在“public function __construct()”“$this->attribute=self::$width * self::$height;”上 在主范围内,我写了“echo $object->attribute”。
“;”

<?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;
?>
于 2012-05-08T04:19:19.993 回答