【问题标题】:syntax error, unexpected '.' in PHP OOP [duplicate]语法错误,意外的 '.'在 PHP OOP [重复]
【发布时间】:2016-07-10 09:54:09
【问题描述】:

我正在做一个简单的项目,我正在使用 PHP Object Oriented。基本上我有一个类,其中包含有关如何从 MySQL 数据库获取数据并在页面上显示它们的信息。这个类称为admin.php,如下所示:

<?php 
class Admin{
    private $db,$username,$password,$id,$group,$Datetime,$msg;
    public function __construct()
    {
        $this->db = new Connection();
        $this->db = $this->db->dbConnect();
    }
    public function getAdmin($name)
    {
        if(!empty($name))
        {
            $adm = $this->db->prepare("select * from admins where username=?");
            $adm->bindParam(1,$name);
            $adm->execute();
            while($row = $adm->fetch())
            {
                $this->id       = $row['id'];
                $this->username = $row['username'];
                $this->password = $row['password'];
                $this->group    = $row['group'];
                $this->Datetime = $row['date_joined'];
                $this->msg      = $row['welcome_message'];
            }
        }
    }
    public function getID()
    {
        return $this->id;
    }
    public function getUsername()
    {
        return $this->username;
    }
    public function getPassword()
    {
        return $this->password;
    }
    public function getGroup()
    {
        return $this->group;
    }
    public function gtDate()
    {
        return $this->Datetime;
    }
    public function welcomeMessage()
    {
        return $this->msg;
    }
}
?>

然后在另一个名为 dashboard.php 的页面上,我已经包含了这个类文件并编码了这个:

<?php if ($dataSet->welcomeMessage()== 0){ 
    echo "
            <li class='dropdown messages-menu'>
                    <!-- Menu toggle button -->
                    <a href='#' class='dropdown-toggle' data-toggle='dropdown'>
                      <i class='fa fa-envelope-o'></i>
                      <span class='label label-success'>1</span>
                    </a>
                    <ul class='dropdown-menu'>
                        <li class='header'>You have one new message</li>
                        <li>
                            <!-- inner menu: contains the messages -->
                            <ul class='menu'>
                                <li><!-- start message -->
                                    <a href='message.php?msg=".$dataSet->msg();."'>
                                        <div class='pull-left'>
                                            <!-- User Image -->
                                            <img src='dist/img/user2-160x160.jpg' class='img-circle' alt='User Image'>
                                        </div>
                                        <!-- Message title and timestamp -->
                                        <h4>
                                            Support Team
                                        <small><i class='fa fa-clock-o'></i>Just now</small>
                                        </h4>
                                        <!-- The message -->
                                        <p>Welcome to your admin panel</p>
                                    </a>
                                </li>
                                <!-- end message -->
                            </ul>
                            <!-- /.menu -->
                        </li>"; 
    }
?>

但是每当我运行它时,我都会收到以下错误消息:

解析错误:语法错误,意外'.'在 dasboard.php 的第 15 行

这是仪表板文件的第 15 行:

<a href='message.php?msg=".$dataSet->msg();."'>

很确定这一定与在我回显语句时错误地在 html 标记中连接和组合类方法有关。

那么正确的方法是什么?

【问题讨论】:

  • 然后它会返回一个致命错误:调用未定义的方法 Admin::msg() !但是,正如您在代码中看到的那样,它的定义是正确的
  • 我们可以看到它没有定义,你可能想要调用名为welcomeMessage()的方法。还有为什么在 PHP 引号中回显 HTML,只输出纯 HTML。还有一件事:这个类包含不同职责的代码。您应该区分这些问题。
  • 错误出现在;.。另外,msg 是私有属性,而不是方法。

标签: php mysql oop


【解决方案1】:

"$dataSet->msg" 不是函数而是属性,需要这样调用。

<a href='message.php?msg=".$dataSet->msg."'> // but wont work as it is private

或者使用下面的方法调用

<a href='message.php?msg=".$dataSet->welcomeMessage()."'>

【讨论】:

  • 而且只有当“welcomeMessage()== 0”甚至在 echo 块中它会保持“0”时,你才会进入 if 块
【解决方案2】:

好的,假设$dataSet 已定义,并且它具有所有必需的方法。然后你只需要省略;:

echo "some text " . $dataSet->msg() . " more text";

【讨论】:

  • 因此我写了“假设有”;)
猜你喜欢
  • 2013-12-20
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 2015-09-09
相关资源
最近更新 更多