类Object的对象无法在面向对象的php中转换为字符串错误

时间:2015-12-29 19:16:01

标签: php

我是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>

3 个答案:

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