【问题标题】:Static Method Not Working on Web Server in PHP静态方法在 PHP 中的 Web 服务器上不起作用
【发布时间】:2013-12-26 14:23:03
【问题描述】:

我刚刚在PHP 中完成了一个站点的工作,并决定将其上传到我的网络服务器,但是当我尝试使用静态方法调用运行页面时,我收到此错误Unexpected T_PAAMAYIM_NEKUDOTAYIM。我知道这与双冒号错误有关,但我不明白为什么它在我的本地 Web 服务器上工作并拒绝在我的远程 Web 服务器上工作。

由于这个错误,我不得不通过我的整个站点将所有静态方法转换为实例方法

<?php
class User
{
    private $userId;

    public function __construct()
    {
        if(func_num_args() == 1)
        {
            $this->userId   =   func_get_arg(1);
        }
    }

    public static function userNameExists($name)
    {
        global $dbc;

        if(gettype($name) != "string")
        {
            die("Invalid Function Parameter");
        }

        $sql    =   "SELECT username FROM users WHERE users.username='$name'";
        $result =   mysqli_query($dbc, $sql) or die("Could Not Check Username at This Time: ".mysqli_error($dbc));

        if(mysqli_num_rows($result) > 0)
        {
            return true;
        }
        else
        {

            return false;
        }
    }
?>

当我调用它时:

<?php
   require("users.php");

   if(User::userNameExists($_GET['username']))
     header("Location:index.php");
?>

【问题讨论】:

  • 你需要发布你的代码
  • 代码在哪里?这个错误发生在哪一行?两种环境下的 PHP 版本是多少?
  • ) 字符在您的 if(User::... 行末尾丢失
  • global with oop 伤害了我 ;/
  • @EpicWebDesign 请不要修复人们问题中的语法错误——他们遇到的问题实际上可能语法错误!

标签: php oop


【解决方案1】:

您的代码末尾缺少}

<?php
class User
{
    private $userId;

    public function __construct()
    {
        if(func_num_args() == 1)
        {
            $this->userId   =   func_get_arg(1);
        }
    }

    public static function userNameExists($name)
    {
        global $dbc;

        if(gettype($name) != "string")
        {
            die("Invalid Function Parameter");
        }
        //Think about escaping user input
        $name = mysqli_real_escape_string($name);
        $sql    =   "SELECT username FROM users WHERE users.username='$name'";
        $result =   mysqli_query($dbc, $sql) or die("Could Not Check Username at This Time: ".mysqli_error($dbc));

        if(mysqli_num_rows($result) > 0)
        {
            return true;
        }
        else
        {

            return false;
        }
    }
}//This one
?>

您的 require 语句中还缺少 "

<?php
   require("users.php");//This one

   if(User::userNameExists($_GET['username']))
     header("Location:index.php");
?>

【讨论】:

    【解决方案2】:

    尝试检查您的网络服务器和本地计算机的PHP 版本。 你可以参考这个link。您可能有同样的问题和解决方案。

    【讨论】:

      【解决方案3】:

      如果完全相同的代码在本地运行,但在实时服务器上出现语法错误,则您可能使用了不同的 PHP 版本(可能是服务器上的旧 PHP4 版本)。

      【讨论】:

        【解决方案4】:

        您在

        末尾缺少一个右括号

        if(用户::userNameExists($_GET['username'])

        改为这样做

        if(用户::userNameExists($_GET['username']))

        【讨论】:

          猜你喜欢
          • 2016-05-23
          • 2010-11-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-30
          • 2012-01-12
          • 2013-10-02
          • 1970-01-01
          相关资源
          最近更新 更多