سؤال

لا يبدو أن هذا أدناه يعمل كيف أتوقع ذلك والحدث على الرغم من $ _GET ["Friendid"] = 55 هو إرجاع فارغة

<?PHP

$_GET['friendid'] = 55;

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

echo $friendid;
exit;

?>
هل كانت مفيدة؟

المحلول

مسح ال !. وبعد أنت لا تريد أن تنفي التعبير.

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

نصائح أخرى

اعتبارا من بيان PHP 7, ، يمكنك استخدام المشغل Null-Coalcing (Double "؟") لهذا:

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

في PHP 5.3+، إذا كان كل ما تدققه هو "صادقة"القيمة، يمكنك استخدام" مشغل Elvis "(لاحظ أن هذا لا يتحقق ISSET).

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

إذا كنت كسول ومخطوطي، يمكنك استخدام خطأ تحكم المشغل @ وشكل قصير من مشغل ثلاثي.

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

تعمل حاليا مع مشغل Ternary:

$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'] إذا تم ضبطه مسبقا.

أفضل حل لهذا السؤال، أي إذا كنت بحاجة أيضا إلى "التحقق من السلسلة الفارغة"، فارغة().

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

فارغة() لا يتحقق فحسب مما إذا كان المتغير يتم تعيين المتغير، ولكن بإرجاع بالإضافة إلى ذلك، إذا قام بتغذية أي شيء يمكن اعتباره "فارغا"، مثل سلسلة فارغة، صفيف فارغ، عدد صحيح 0، Boolean False، ...

من ردكم على فيليب أعتقد أنك بحاجة إلى إلقاء نظرة على الاختلافات بين فارغة و isset.

لتلخيص، isset() سيعود Boolean True إذا كان المتغير موجود. وبالتالي، إذا كنت تفعل

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

$exists سيكون صحيحا كما $_GET['friendid'] موجود. إذا لم يكن هذا ما تريد أن أقترح عليك أن تنظر إلى فارغة. سيعود فارغة صحيحا على السلسلة الفارغة ("")، والذي يبدو أنه ما تتوقعه. إذا كنت تستخدم فارغة، من فضلك ارجع إلى الوثائق التي ارتبطتها، وهناك حالات أخرى ستعود فيها فارغة حيث قد لا تتوقع ذلك، هذه الحالات موثقة بشكل صريح على الرابط أعلاه.

إذا Friendid هو ليس مجموعة، صديق = friendid خلاف ذلك صديق = فارغة

حسنا، ربما يكون لدي مشكلة مماثلة لا تعرف على! الوضع كما كان جاسوندافيس.

نوع من المربكة ولكن العثور على عدم وجود! كما هو الحال في ... ISSET (AVAR $) مقارنة ب! ASSET ($ 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';

كان أقل ارتباطا بكثير مع IF $ = "" "بعد ذلك .... العمل عليه. (أو إذا $ A = "" بالنسبة لأولئك PHP).

أجد هذا الاستخدام للأسلحة والمتغيرات جميعها كسلاسل تكون شاقة للغاية في بعض الأحيان. حتى من خلال الارتباك، يمكنني أن أفهم فعلا لماذا ... فقط يجعل الأشياء صعبة صعبة فهم لي.

انا استخدم غير فارغ من المشغل المشغل في حالة حالة مثل هذا

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

وهو ما يعادل

if(isset($myArr['user']) && $myArr['user']){
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top