我意识到这与许多其他问题类似,但我已经阅读了所有内容,但我仍然无法解决我的问题。我正在尝试定义一个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);
?>
答案 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);