0

我无法从使用 PHP 类文件通过 Web 表单提交的变量中获取值。

这是我的网页结构:

  • 订单页面
  • Process.php 页面
  • Book.php 页面

我可以轻松获取输入的用户数据(在订单页面上)、处理并将其显示在 Process.php 页面上。问题是我必须创建一个 Book 类并使用 Book 类打印数据的详细信息。

我有一个空的构造函数打印出“created”,所以我知道我的构造函数正在被调用。我还可以打印单词“title”,所以我知道我可以使用 Book 类打印到屏幕上。

我的问题是我无法在 Book 类的变量中获取值。

这是我的变量声明:

    private $title;

这是我的 printDetails 函数:

    public function printDetails () {
    echo "Title: " . $this->title . "<br />";
    }

这是我的 book 类的新实例:

    $bookNow = new book;

这是我的获取和设置功能:

    function __getTitle($title)
{
    return $this->$title;
}

    function __setTitle($title,$value)
{
    $this->$title = $value;
}

我确实还有其他四个变量要显示。它们中的每一个都有自己的变量声明、printDetails 中的一行以及它们自己的 setter 和 getter。

最后,我还在我的 PHP 流程中调用了 Book 类。它看起来像这样:

    function __autoload($book) {
        include $book . '.php'; 
    }
    $bookNow = new book();

任何帮助,非常感谢。它一定是非常小的东西(我希望如此)。

4

1 回答 1

1

_setTitle()应该只有一个参数,并删除$赋值语句中的第二个字符(也是 for getTitle()),如下所示:

function _setTitle($title)
{
    $this->title = $title;
}

现在这样称呼它:

$title = !empty($_POST["title"]) ? $_POST["title"] : NULL;
$bookNow->_setTitle($title);

除非您正在处理魔术函数,否则不要使用双下划线。我认为这是不好的做法。还要检查你班级的案例——即使 php 对案例非常放松。如果您的类文件名为“Book.php”,那么您的构造函数应该以大写形式调用以确保(也可能使用括号)。

编辑:好的,这是我制作的课程,效果很好,我对其进行了测试:

class Book {

    private $title;

    function __construct() {}

    function _getTitle($title)  {
        return $this->title;
    }

    function _setTitle($title) {
        $this->title = $title;
    }

    public function printDetails() {
        echo "Title: " . $this->title . "<br />";
    }

}

确保在 POST 中获得一个值,如下所示:

$title = !empty($_POST["title"]) ? $_POST["title"] : 'No Title Found!';
$bookNow = new Book();
$bookNow->_setTitle($title);
$bookNow->printDetails();

注意:不要将上述语句放在“book.php”类文件中。

如果您的表单提交出错,您将看到“未找到标题!”,否则您将看到正确的标题。

于 2012-11-04T10:58:30.963 回答