質問

このテストページでは、

$page   = (int) $_GET['page'] ?: '1';
echo $page;

は、私は、ページが定義されていないときに私が取得していた出力を理解していません

Request   Result
?page=2   2
?page=3   3
?page=    1
?         error: Undefined index page

なぜエラーメッセージ?これは、PHP 5.3です。なぜそれが?

"1" エコーしません。
役に立ちましたか?

解決

(私の意見では)適切な方法は以下のようになります:

$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;

?page=0がfalseに評価されるように)あなたは新しいスタイルを使用している場合でも、あなたは0に問題があるでしょう。 の "新" の常に良いとは限りません...あなたはのそれを使用するとき、を知っている必要があります。

他のヒント

残念ながら、あなたがのためにそれを使用したい目的のためにそれを使用することはできません

  

式expr1?:expr3は戻りがあればexpr1とのTRUEと評価、およびexpr3はそれ以外の式expr1。

それでもISSETを使用するか、()空にする必要がありますので、 - ?:演算子はISSETチェックが含まれていません。あなたが使用する必要があります:

$page = !empty($_GET['page']) ? (int)$_GET['page'] : 1;
だけでは完全を期すために、それを達成するための別の方法は、オペレータのランクを引くことです。

 $page = (int)$_GET["page"]  or  $page = 1;

それはISSETより短い()構文ですけれども多くの人々は、しかし、読めないとしてこれを認識しています。

それとも、入力オブジェクトまたはその他のユーティリティクラスを使用している場合:

 $page = $_GET->int->default("page", 1);
(int型)$ _GET [ 'ページ']

:あなたは未定義だ型キャスト何かしようとしているため、それはです

(int)を削除するか、条件付きの行の後にタイプキャストを設定します。

膨張があなたの関心事である場合は、どのようにヘルパー関数についてはどうですか?

function get_or($index, $default) {
    return isset($_GET[$index]) ? $_GET[$index] : $default;
}

そして、あなただけ使用することができます:

$page = get_or('page', 1);
清潔でハンドル未定義の値です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top