هل عمل isset بشكل مختلف في الإصدارات الأقدم؟

StackOverflow https://stackoverflow.com/questions/401747

  •  03-07-2019
  •  | 
  •  

سؤال

لقد حصلت على بعض التعليمات البرمجية القديمة التي تحتوي على هذا:

<?PHP
    if(isset($_GET['pagina'])=="homepage") {
?>
HtmlCode1
<?php 
} else { 
?>
HtmlCode2
<?php 
} 
?>

لا أعرف بالضبط السبب ولكن يبدو أن هذا يعمل.يتم تحميل htmlcode1 عندما يكون لدي ?pagina=homepage ويتم تحميل htmlcode2 عندما لا يكون pagina var موجودًا أو يكون شيئًا آخر (لم أره حقًا بشيء آخر، ولكن ليس هناك).الموقع يستخدم PHP4 (لا أعرف الإصدار الدقيق).ولكن في الحقيقة، كيف يمكن أن يعمل هذا؟نظرت إلى الدليل ويقول إن isset يُرجع منطقيًا ..

أي واحد؟

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

المحلول

والمشكلة هي أن "==" ليست مقارنة من نوع الحساس. أي (غير فارغة) السلسلة "متساوية" لقيمة المنطقية صحيح، ولكن ليس على مماثلة لذلك (لذلك تحتاج إلى استخدام "===" المشغل).

وهناك مثال سريع، لماذا نشهد هذا السلوك:
HTTP: //codepad.org/aNh1ahu8

ولمزيد من التفاصيل حول هذا الموضوع من وثائق، انظر:
<لأ href = "http://php.net/manual /en/language.operators.comparison.php "يختلط =" نوفولو noreferrer "> http://php.net/manual/en/language.operators.comparison.php
<لأ href = "http://ca3.php.net /manual/en/types.comparisons.php "يختلط =" نوفولو noreferrer "> http://ca3.php.net/manual/en/types.comparisons.php (وفي" مقارنات منزوع مع == " الجدول على وجه التحديد)

نصائح أخرى

وisset() يعود صحيحة أو خاطئة. في المقارنة المنطقية، فإن "homepage" تقييم لtrue. ذلك أساسا كنت حصلت هنا:

if ( isset($_GET['pagina']) == true )

إذا باجينا يساوي أي شيء، وسوف ترى HtmlCode1. إذا كان أي مجموعة، سترى HtmlCode2.

ولقد حاولت ذلك لتأكيد هذا، والذهاب إلى ?pagina=somethingelse يفعل على لا إظهار HtmlCode2.

وأظن أنه من الخطأ لأنه لا يجعل حقا معنى للمقارنة صحيح / خطأ مع "الصفحة الرئيسية". أتوقع رمز يجب أن يكون في الواقع:

if (isset($_GET['pagina']) && ($_GET['pagina'] == "homepage")) {
}

بعض الأفكار حول كيفية عمل ذلك (بصرف النظر عن "الصفحة الرئيسية" المذكورة سابقًا==صحيح):

  • تم إعادة تعريف Isset في مكان ما؟
  • إنها نسخة معدلة ذاتيا من PHP؟
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top