我想在不创建对象的情况下初始化属性

时间:2012-05-07 09:33:15

标签: php oop static

当我运行以下代码时,我在行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;
?>

4 个答案:

答案 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;
?>