web-dev-qa-db-ja.com

簡単なPHP isset test

$ _GET ['friendid'] = 55それはNULLを返しますが、以下はこれが私が期待する方法では機能しないようです

<?PHP

$_GET['friendid'] = 55;

$friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';

echo $friendid;
exit;

?>
26
JasonDavis

!を削除します。あなたはその表現を否定したくないのです。

$friendid = isset($_GET['friendid']) ? $_GET['friendid'] : 'empty';
46
Philippe Gerber

PHP 7のリリース 以降、これにはnull結合演算子(二重「?」)を使用できます。

$var = $array["key"] ?? "default-value";
// which is synonymous to:
$var = isset($array["key"]) ? $array["key"] : "default-value";

PHP 5.3+では、チェックするすべてが " truthy "値である場合、 "Elvis演算子"を使用できます(これはissetをチェックしないことに注意してください) )。

$var = $value ?: "default-value";
// which is synonymous to:
$var = $value ? $value : "default-value";
57
Greg

怠惰で危険な場合は、 エラー制御演算子@ および 項演算子 の省略形を使用できます。

$friendid = @$_GET['friendid']?: 'empty';
11
Dima Mironov

現在、三項演算子を使用しています。

$friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';

if-elseステートメントに分解すると、次のようになります。

if(!isset($_GET['friendid']))
   $friendid = $_GET['friendid'];
else
   $friendid = 'empty';

ifステートメントで実際に何が起こっているかを見てください:

!isset($_GET['friendid'])

isset関数の前の感嘆符(!)に注意してください。これは、「反対」の別の言い方です。ここでは、$_GET['friendid']に値が設定されていないことを確認しています。その場合、$friendidはその値をとるべきです。

しかし、実際には、$_GET['friendid']が存在しないため、壊れてしまいます。そして、そこにないものの価値を受け入れることはできません。

最初から$_GET['friendid']の値を設定したので、最初のif条件はfalseになり、elseオプションに渡されます。

この場合、$friendid変数の値をemptyに設定します。

感嘆符を削除すると、以前に設定されている場合、$friendidの値が$_GET['friendid']の値になります。

5
random

この質問の最善の解決策、つまり「空の文字列を確認する」必要がある場合は、 empty() です。

$friendid = empty($_GET['friendid']) ? 'empty' : $_GET['friendid'];

empty() は、変数が設定されているかどうかをチェックするだけでなく、空の文字列、空の配列、整数0、ブール値など、「空」と見なされる可能性のあるものが入力された場合にfalseを返しますfalse、...

2
Sygmoral

Philippeへの返信から、 emptyisset の違いを確認する必要があると思います。

要約すると、変数が存在する場合、isset()はブール値TRUEを返します。したがって、もしあなたがやるなら

$fid = $_GET['friendid'] = "";
$exists = isset($fid);

$existsが存在するため、$_GET['friendid']はTRUEになります。これが必要なものでない場合は、空を調べることをお勧めします。空は、空の文字列( "")に対してTRUEを返します。これは、期待どおりのようです。空を使用する場合、お願いリンク先のドキュメントを参照してください。空が予期しない場所でtrueを返す場合もあります。ケースは上記のリンクで明示的に文書化されています。

1
mdec

friendidが[〜#〜]でない場合[〜#〜]設定されている場合、friendid = friendid、それ以外の場合はfriendid =空

0
Alix Axel

このようなif条件で Null合体演算子 演算子を使用しています

if($myArr['user'] ?? false){

これは

if(isset($myArr['user']) && $myArr['user']){
0
Niklesh Raut

さて、私はに精通していない同様の問題を抱えている可能性があります! jasondavisが持っていたような状況。

ちょっと混乱しますが、のように... isset($ avar)を!isset($ avar)と比較すると、かなりの違いが生まれます。

ので!その場で、はいのように述べています

    since $_GET['friendid'] = 55; has been initialized...
                                tell me 'no' - the opposite - that it hasn't and set it to empty.
              $friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';

    where not having the ! tells me yes it has something in it, leave it be.

               $friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';

もしA $ = ""なら、混乱することはありませんでした。 (またはPHP)の$ A = ""の場合)。

文字列としての文字列と変数の使用は、時として非常に困難であることがわかりました。混乱したとしても、実際にはなぜなのか理解できます...理解しづらくなるだけです。

0
PHPLearner