我刚刚在PHP
中完成了一个网站的工作,并决定将其上传到我的web服务器,但当我尝试使用静态方法调用运行页面时,我会收到这个错误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
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
?>
您的需求声明中也缺少"
<?php
require("users.php");//This one
if(User::userNameExists($_GET['username']))
header("Location:index.php");
?>
如果完全相同的代码在本地工作,但在实时服务器上出现语法错误,则可能使用不同的PHP版本(服务器上可能是旧的PHP4版本)。
末尾缺少一个右括号
if(User::userNameExists($_GET['username])
改为
if(User::userNameExists($_GET['username]))
尝试检查web服务器和本地机器的PHP
版本。您可以参考此链接。你们可能有同样的问题和解决方案。