当我定义它时,如何在php中修复错误“未定义变量”?

时间:2015-11-21 17:14:42

标签: php

我意识到这与许多其他问题类似,但我已经阅读了所有内容,但我仍然无法解决我的问题。我正在尝试定义一个Sphere类,它可以根据半径计算球体的各个方面。但是,当我尝试在脚本结束时回显$ radius(作为测试)时,我收到了未定义变量的错误。我是php的新手,我正在网上学习,所以我可能做了一些愚蠢的事情。关于“echo get_area(5)”,我也正在“调用未定义的函数”。位。

<?php

define("PI", 3.14);
define("fourOverThree", 1.25);

class sphere
{
    private $radius;
    //a method
    public function set_radius($input)
    {
        $radius = $input;
    }

    public function get_diameter($radius)
    {
        $diameter = $radius * 2;
    }

    public function get_area($radius)
    {
        $area = PI * ($radius * $radius);
    }

    public function get_volume($radius)
    {
        $volume = fourOverThree * PI * ($radius * $radius * $radius);
    }

    public function __construct() 
    {
        //stub
    }

}
$sphere1 = new sphere;
$sphere1->set_radius(5);
echo $radius;
echo get_area(5);
?>

1 个答案:

答案 0 :(得分:1)

$radius$this->radius之间存在差异。代码中的set_radius()方法设置了一些全局变量,而不是预期的对象属性。确实没有在任何地方定义方法get_radius() ......

我想这是你正在寻找的方向:

<?php

class sphere
{
    const PI = M_PI; // M_PI is one of php's predefined constants

    private $radius;

    public function set_radius($radius)
    {
        $this->radius = $radius;
    }

    public function get_diameter()
    {
        return $this->radius * 2;
    }

    public function get_area()
    {
        return self::PI * pow($this->radius, 2);
    }

    public function get_volume()
    {
        return (4/3) * self::PI * pow($this->radius, 3);
    }

    public function get_radius()
    {
        return $this->radius;
    }

    public function __construct($radius) 
    {
        $this->radius = $radius;
    }

}


$sphere1 = new sphere;
$sphere1->set_radius(5);
echo $sphere1->get_area(5);

关于精度的注释:由于这使用浮点运算,因此结果不准确。这不是特定于php的问题,而是浮点运算的工作原理之一。

而不是那个setter set_radius()我还建议使用构造函数,因为没有直径的球体没有任何意义......所以:

$mySphere = new sphere(5);
echo $mySphere->get_area(5);