静态方法在PHP中不适用于Web服务器

时间:2013-12-09 12:57:26

标签: php oop

我刚刚在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");
?>

4 个答案:

答案 0 :(得分:4)

您的代码末尾缺少}

<?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");
?>

答案 1 :(得分:2)

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

答案 2 :(得分:1)

您在

末尾缺少右括号
  

如果(用户:: userNameExists($ _ GET [ '用户名'])

改为

  

如果(用户:: userNameExists($ _ GET [ '用户名'))

答案 3 :(得分:1)

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