我是php的OO新手。我正在使用这段代码并且出现了错误"班级年份的对象无法转换为字符串"。现在我知道错误在说什么,但我无法解决问题。是的,我已经检查过有关此问题的所有其他问题。有人请帮帮我。这是代码:
<?php
if(isset($_POST['sub'])){
$name=$_POST['name'];
$age=$_POST['age'];
$hrs=$_POST['hrs'];
class Years
{
const divid=24;
public function __construct($nme,$ag,$hr)
{
$ans= ($ag * $hr)/self::divid;
return $ans;
}
public function calc()
{
return "ok";
}
}
echo $yrs= new Years($name,$age,$hrs);
}
?>
<html>
<head>
<title>Form</title>
</head>
<body>
<h1>My Unconcious Life</h1>
<form method="post">
Your Name:<br />
<input type="text" name="name" /><br />
Your Age:<br />
<input type="text" name="age" /><br />
Hours slept per night:<br />
<input type="text" name="hrs" /><br />
<input type="submit" name="sub" value="Calculate" />
</form>
</body>
</html>
答案 0 :(得分:1)
你班上有几个问题。我们来看看:
class Years
{
const divid=24;
public function __construct($nme,$ag,$hr)
{
$ans= ($ag * $hr)/self::divid;
return $ans;
}
public function calc()
{
return "ok";
}
}
echo $yrs= new Years($name,$age,$hrs);
问题#1:constructors不返回任何内容。
为了让你的类返回一些东西,你应该创建一个属性,然后用getter方法返回它:
class Years
{
const divid=24;
private $ans;
public function __construct($nme,$ag,$hr)
{
$this->ans = ($ag * $hr)/self::divid;
}
public function getAns()
{
return $this->ans;
}
public function calc()
{
return "ok";
}
}
问题#2:你的构造函数有未使用的参数。
如果不需要,为什么要将$nme
(注意拼写错误)参数传递给构造函数?
class Years
{
const divid=24;
private $ans;
public function __construct($ag,$hr)
{
$this->ans = ($ag * $hr)/self::divid;
}
public function getAns()
{
return $this->ans;
}
public function calc()
{
return "ok";
}
}
问题#3:为了将对象转换为字符串,您的类应该实现__toString()
方法:
class Years
{
const divid=24;
private $ans;
public function __construct($ag,$hr)
{
$this->ans = ($ag * $hr)/self::divid;
}
public function getAns()
{
return $this->ans;
}
public function __toString()
{
return $this->getAns();
}
public function calc()
{
return "ok";
}
}
尽管如此,我还是说你的根本问题是你在不需要时创造物品。
如果你只想改变时间单位,你只需要一个函数:
function getYears($ag, $hr) {
return $ag * $hr / 24;
}
这应该是它。这不是一个需要面向对象的问题,一个简单的函数调用就可以实现。
永远记得KISS。
答案 1 :(得分:0)
正确的编码方式是
npm install -g node-gyp
git clone https://github.com/christkv/kerberos.git
cd kerberos
npm install
node-gyp rebuild
答案 2 :(得分:0)
与其他答案略有不同。更容易一点。
class Years
{
const divid=24;
public $ans;
public function __construct($nme,$ag,$hr)
{
$this->ans = ($ag * $hr)/self::divid;
}
public function calc()
{
return "ok";
}
}
$yrs= new Years($name,$age,$hrs);
echo $yrs->ans;