0

私は初心者のphpで、誰かが助けてくれることを望んでいた問題に行き詰まっています。

次の内容の .php をサーバーにアップロードし、クロム ブラウザにロードすると、問題はないようです。

<?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" の取得中に Web サイトでエラーが発生しました。メンテナンスのために停止しているか、正しく構成されていない可能性があります。

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 を使用することを意味しますhttp

于 2012-01-09T01:23:36.230 に答える
0

三項演算子と呼ばれるものを使用しようとしていると思います。この演算子は、次の構文を想定しています。

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

ドキュメントには、PHP 5.3 以降を使用している場合にのみ、中間節 ('true の場合の処理​​' 節) を省略できると記載されています。私の意見では、これは悪い習慣です。そのショートカットを許可する他のプログラミング言語を私は知りません。コードを読むのがずっと難しくなるだけです (特に、書いてから 1 年以上経ってから読んでいる場合)。(可能な場合) 下位互換性のあるコードを作成することをお勧めします。その結果、移植性がはるかに高くなります。

更新:ウィキペディアで三項演算子について少し読みましたが、他のいくつかの言語にはこのようなショートカットがあります (たとえば、C の GNU 拡張機能が存在します)。ショートカットの使用はまだ悪いと思います。ステートメントの評価が副作用をもたらす場合が思い浮かびます。

于 2012-01-09T01:31:25.123 に答える