2012-01-09 38 views
0

我是一个新手PHP和我卡在一个问题上,我希望有人可以提供我帮助。PHP服务器返回引起的错误?:“http”

当我将包含以下内容的.php上传到我的服务器并在Chrome浏览器中加载时,似乎没有任何问题。

<?php 

class AppInfo { 
    public static function getHome() { 
    return ($_SERVER['HTTP_X_FORWARDED_PROTO'])."://" . $_SERVER['HTTP_HOST'] . "/"; 
} 

}

然而,当我上传包含下面的非常相似的代码。PHP文件(不同的是存在:“HTTP”),铬返回一个服务器错误(粘贴下面的代码)

<?php 
class AppInfo { 
    public static function getHome() { 
    return ($_SERVER['HTTP_X_FORWARDED_PROTO'] ?: "http") . "://" . $_SERVER['HTTP_HOST'] . "/"; 
} 
} 

错误:

Server错误 该网站遇到了一个错误,而检索“URL”这可能关闭进行维护或配置d不正确。

+3

这是无效的语法。你认为它有什么作用? – SLaks 2012-01-09 01:18:16

+0

你究竟想要做什么?我的意思是,你要找的输出是什么? – Adi 2012-01-09 01:20:35

+1

这是PHP 5.2及更早版本的解析错误。 '?:'快捷键仅适用于5.3及更高版本。 – mario 2012-01-09 01:22:08

回答

1

您应将其更改为

return ($_SERVER['HTTP_X_FORWARDED_PROTO'] ? $_SERVER['HTTP_X_FORWARDED_PROTO'] : "http") . "://" . $_SERVER['HTTP_HOST'] . "/"; 

那么这将意味着如果($_SERVER['HTTP_X_FORWARDED_PROTO']是有使用它使用别的http

+0

这不会引发错误。一旦我确认这个功能仍在执行它的预期任务,我会将其标记为正确的。十分感谢你的帮助。 – 2012-01-09 01:45:33

0

我相信你正在尝试使用什么叫ternary operator。该运营商期望的语法如下:

(comparison statement) ? (what to do if true) : (what to do if false) 

的文档指出,你可以省略中间的条款(即“做什么,如果真”条款),只有当你使用PHP 5.3或更高版本。在我看来,这是不好的做法。我没有意识到任何其他允许使用这种快捷方式的编程语言,它只会让你的代码阅读变得更加困难(特别是如果你在编写代码后阅读它一年或更长时间)。最好写代码(尽可能)向后兼容;它将因此更便携。

更新:我读了一些关于ternary operator维基百科上,和一些其他语言确实有这样的快捷方式(GNU扩展对C存在,例如)。我仍然认为使用捷径是不好的;记住评估结果带来副作用的情况值得思考。

+0

'我不知道任何其他允许使用快捷方式的编程语言 - 实际上Javascript是这样做的,但语法不同,因为它使用'||'OR运算符,所以我认为它不完全相同。例如。 'var someVar = someOtherVar || 6;'如果评估为真,给'someOtherVar'的值'someVar';否则给'6'。 – DaveRandom 2012-01-09 01:52:17

+0

@DaveRandom逻辑或是一个非常不同于三元比较的运算符。 JavaScript支持三元运算符,但两个条件都是必需的(不能使用原始提问中提到的快捷键)。 – 2012-01-09 03:38:56

相关问题