0

我是一个 php 新手,我遇到了一个问题,我希望有人能给我帮助。

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

<?php

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

}

但是,当我上传包含以下非常相似代码的 .php 文件时(不同之处在于存在 ?:"http"),chrome 返回服务器错误(粘贴在代码下方)

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

错误:

服务器错误网站在检索“Url”时遇到错误它可能因维护而关闭或配置不正确。

4

2 回答 2

1

你应该把它改成

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

所以这意味着 if ($_SERVER['HTTP_X_FORWARDED_PROTO']is there use it else use http

于 2012-01-09T01:23:36.230 回答
0

我相信您正在尝试使用所谓的三元运算符。此运算符需要以下语法:

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

文档指出,只有在您使用 PHP 5.3 或更高版本时,您才可以省略中间子句('what to do if true' 子句)。在我看来,这是不好的做法。我不知道任何其他允许该快捷方式的编程语言,它只会使阅读您的代码变得更加困难(特别是如果您在编写它一年或更长时间后阅读它)。最好编写(在可能的情况下)向后兼容的代码;结果,它将更加便携。

更新:我在 Wikipedia 上阅读了一些关于三元运算符的信息,其他一些语言确实有这样的快捷方式(例如,存在 C 的 GNU 扩展)。我仍然认为使用快捷方式不好;语句评估导致副作用的情况浮现在脑海中。

于 2012-01-09T01:31:25.123 回答