質問
以下のこれは、$_GET['friendid'] = 55 であっても、NULL を返しますが、私が期待するように機能しないようです
<?PHP
$_GET['friendid'] = 55;
$friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';
echo $friendid;
exit;
?>
解決
!
を削除します。あなたは式を否定する必要はありません。
$friendid = isset($_GET['friendid']) ? $_GET['friendid'] : 'empty';
他のヒント
PHP 7のリリースののとして、あなたは(ダブル「?」)、ヌル・合体演算子を使用することができ、このために:
$var = $array["key"] ?? "default-value";
// which is synonymous to:
$var = isset($array["key"]) ? $array["key"] : "default-value";
PHP 5.3+では、あなたがチェックしているすべては、 "<のhref =" http://www.php.net/manual/en/language.types.boolean.php#language.types.booleanがある場合。 「> truthy の」値をキャストするには、「エルビス演算子」(これはISSETをチェックしないことに注意)を使用することができます。
$var = $value ?: "default-value";
// which is synonymous to:
$var = $value ? $value : "default-value";
は、エラー制御演算子を使用することができます@ と三項演算するます。
$friendid = @$_GET['friendid']?: 'empty';
現在、あなたは三項演算子で作業しています
$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
オプションに渡すように、最初からそれを取ると、あなたは、else
の値を設定しています。
この場合、$friendid
するempty
変数の値を設定します。
何が欲しいのは感嘆符を削除するには、それが以前に設定されている場合、その後$friendid
の値が$_GET['friendid']
の値になりますです。
この質問に対する最善の解決策は、すなわちあなたも「空の文字列をチェック」する必要がある場合は、<のhref =「http://be2.php.net/manual/en/function.empty.php」でありますrel = "nofollowを">空()の。
$friendid = empty($_GET['friendid']) ? 'empty' : $_GET['friendid'];
空の()は、変数が設定されているかどうかだけでなく、検査をするそれはそのような空の文字列、空の配列、整数0、ブール偽、...
のように、「空」と考えられるものを供給される場合には、さらに、falseを返しますPhilippe へのあなたの返信から、次の違いを確認する必要があると思います。 空の そして セット.
要約すると、 isset()
変数が存在する場合はブール値 TRUE を返します。したがって、もしあなたがそうするとしたら、
$fid = $_GET['friendid'] = "";
$exists = isset($fid);
$exists
次のように TRUE になります $_GET['friendid']
存在します。これが望ましくない場合は、空を検討することをお勧めします。Empty は空の文字列 ("") に対して TRUE を返します。これは期待どおりのようです。空を使用する場合は、 お願いします リンク先のドキュメントを参照してください。空が予期しない場合に true を返す場合もあります。これらのケースは上記のリンクで明示的に文書化されています。
friendidがある場合のしないのセット、friendid = friendidそうfriendid =空の
さて、私は同様の問題を抱えていることに精通されていません! jasondavisが持っていたような状況ます。
混乱の種類が、見つけ出す持っていません!中... ISSET($ AVAR)!のISSET($ AVAR)と比較してはかなりの違いを作ることができます。
とそう!所定の位置に、複数の
のようにYESを述べています 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のそれらのため)。
私は、すべての文字列として文字列と変数のこの使用は、時には非常に困難なことを見つけます。でも混乱通じ、私は実際にちょうど私のために難しい少しは把握する事になります...理由を理解することができます。
私が使用していますこのような状態の場合でのnull合体演算子の演算子
if($myArr['user'] ?? false){
に相当する。
if(isset($myArr['user']) && $myArr['user']){