كيفية التحقق مما إذا كان المتغير فارغًا أم لا في php. ورقة الغش لـ PHP: FALSE وNULL والقيم المرتبطة بهما. تقوم الدالة is_null() واللغة ببناء isset() وempty()

في PHP، تختلف القيمتان FALSE وNULL والقيم المرتبطة بهما عما هي عليه عادة في اللغات الأخرى ولها ميزاتها الخاصة غير الواضحة.
تتناول المقالة هذه الميزات.
بالنسبة للمبتدئين، قد يكون هذا مفيدًا لرؤية الصورة الكاملة؛ أما بالنسبة للقراء ذوي الخبرة، فقد يكون مفيدًا لتحديث ذاكرتهم إذا غابت عن أذهانهم بعض الفروق الدقيقة.

خطأ في عبارات If

وفقًا لوثائق PHP، تكون القيم التالية خاطئة بعد التحويل إلى القيمة المنطقية:
  • القيمة المنطقية نفسها FALSE
  • سلسلة فارغة ("") والسلسلة "0".
  • صفيف فارغ (صفيف) - صفيف ().
  • كائن يحتوي على صفر من متغيرات الأعضاء (PHP 4 فقط، لم تتم تغطيته في هذه المقالة)
  • قيمة NULL خاصة (بما في ذلك المتغيرات غير المحددة)
  • كائنات SimpleXML (لم تتم تغطيتها في هذه المقالة)
وهذا يعني أنه إذا تم تمرير هذه القيم إلى الشرط:
إذا (...) صدى "1"؛ وإلا صدى "0"؛
ثم سيتم طباعة السلسلة "0".

إذا لم يتم تعيين قيمة المتغير (غير محدد)، فقد يتم إصدار تحذير أيضًا. ولنذكرك أنه يمكن إزالة التحذير الموجود في الحالة عن طريق كتابة @ قبل المتغير.

على سبيل المثال:

إذا (@$undefVar) (...)
ولكن يجب عليك استخدام @ فقط في الحالات القصوى، عندما تفكر مليًا ولا توجد خيارات أخرى مناسبة. راجع الدالة isset() .

تقوم الدالة is_null() واللغة ببناء isset() وempty()

تقوم الدالة is_null() بإرجاع TRUE فقط للمتغيرات التي لم يتم تعيين أي قيمة لها أو التي تم تعيين القيمة NULL لها.
تُرجع isset() قيمًا منطقية فردية مقارنةً بـ is_null() .
إذا لم يتم تعيين قيمة للمتغير، فستُصدر الدالة is_null() أيضًا تحذير "متغير غير محدد"، على عكس الدالة isset()، التي لا تُصدر أي تحذير.
تذكر أنه من أجل إزالة قيمة متغير، يمكنك استخدام الدالة unset() . يمكنك أيضًا تعيين القيمة NULL لهذا الغرض لتجنب تحذيرات المترجم عند محاولة قراءة قيمة متغير.

يرجى ملاحظة أنه، على عكس المتغيرات، للعمل مع الثوابت، يجب عليك استخدام البنية المعرفة ().

تمثيل السلسلة

دعونا نلقي نظرة على تمثيل السلسلة للثوابت الخاطئة.
على سبيل المثال، يقوم التسلسل بتحويل القيم إلى السلاسل التالية، كما هو موضح في الجدول أدناه:

تم وصف موضوع التحويل إلى سلاسل بمزيد من التفاصيل على الموقع الرسمي في فقرة التحويل إلى سلسلة.

مشغلي المقارنة

دعنا ننتقل إلى عوامل المقارنة.
جميع القيم الخاطئة تعود صحيحة، كما هو متوقع، عند مقارنتها بـ FALSE باستخدام عامل التشغيل " == ".
لكن لا يجب الاعتماد على العبورية هنا عند مقارنة ثوابت السلسلة الزائفة مع بعضها البعض.
فيما يلي جدول كامل لمقارنة القيم الخاطئة (علامة الزائد تشير إلى عناصر الجدول التي، عند مقارنتها باستخدام عامل التشغيل " != "، تُرجع قيمة حقيقية:

$undef - متغير لم يتم تعيين قيمة له

يمكن استخلاص بعض الاستنتاجات اللطيفة من الجدول:
1. إذا علمنا أننا نستخدم السلاسل فقط، فيمكننا مقارنتها بأمان ولا داعي للقلق من أن "" (سلسلة فارغة) ستكون مساوية لـ "0".
2. المصفوفات لا تساوي أبدًا سلاسل أو أعدادًا صحيحة أو أرقامًا حقيقية.

بما أن أنواع الثوابت الزائفة مختلفة، فيمكن استخدام زوج من العوامل === و!== للتمييز بينها.
يقوم عامل التشغيل === بإرجاع خطأ لجميع أزواج القيم الخاطئة.
تُرجع القيمة الحقيقية فقط للوسيطات التي تم تعيين إحداها بالقيمة NULL، ولم يتم تعيين أي قيمة للثانية.

الفرق بين المتغيرات ذات القيمة NULL والمتغيرات غير المحددة

يتيح لك عامل التشغيل === التمييز بين كافة القيم الخاطئة، باستثناء المتغيرات ذات القيمة NULL من المتغيرات التي لم يتم تعيين قيمة لها.

يمكن تمييز هذه المتغيرات باستخدام الدالة get_defense_vars() .

إذا كنت بحاجة إلى تحديد ما إذا كان قد تم تعيين قيمة للمتغير $var، فيمكن استخدام مقتطف التعليمات البرمجية التالي للقيام بذلك:
إذا (array_key_exists("var"، get_defense_vars())) ( echo "تم تعريف var"; // $var تم تعيينه NULL ) else ( echo "var لم يتم تعريفه"; // $var لم يتم تعريفه أو إلغاء تعيينه($ فار) تم استدعاؤه)

الاستنتاجات

يجب أن تتذكر دائمًا أنه في PHP، قد لا تتساوى قيمتان خاطئتان مع بعضهما البعض، والمتغيرات التي تبدو مختلفة للوهلة الأولى قد يتبين أنها هي نفسها عند مقارنتها. لتجنب مثل هذه المفاجآت، يمكنك استخدام عاملي التشغيل === و!==.

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

تم إجراء الاختبار على PHP 5.3.1.

روابط إضافية

1. جداول مقارنة أنواع PHP.
2. MySQl سلاسل فارغة وفارغة في سياق PHP.

العلامات: إضافة العلامات

سلسلة متغيرة (12)

لدي دالة isNotEmpty التي تُرجع صحيحًا إذا لم تكن السلسلة فارغة وخطأ إذا كانت السلسلة فارغة. اكتشفت أنه لا يعمل إذا قمت بتمرير سطر فارغ من خلاله.

الدالة isNotEmpty($input) ( $strTemp = $input; $strTemp = Trim($strTemp); if(strTemp != "") // جربت أيضًا هذا "if(strlen($strTemp) > 0)" (إرجاع صحيح ) إرجاع كاذبة ;

يتم فحص السلسلة باستخدام isNotEmpty:

إذا (isNotEmpty($userinput["phoneNumber"])) ( // التحقق من صحة رقم الهاتف ) آخر ( echo "لم يتم إدخال رقم الهاتف
"; }

إذا كان السطر فارغًا، وإلا فلن يتم تنفيذه، ولا أفهم السبب، هل يمكن لأحد أن يلقي بعض الضوء على هذا من فضلك.

الإجابات

إذا كان لديك حقل يسمى serial_number وتريد التحقق من وجود مساحة فارغة

$serial_number = Trim($_POST); $q = "اختر * من المنتج حيث user_id = "$_SESSION""؛ $rs=mysql_query($q); while($row=mysql_fetch_assoc($rs))( if(empty($_POST["irons"]))( $irons=$row["product1"]; )

بهذه الطريقة يمكنك تكرار كل الحلقات في حلقة باستخدام دالة فارغة أخرى

حسنًا، بدلاً من الإجابة (أعتقد أنك قد أصلحت مشكلتك بالفعل)، سأقدم لك بعض النصائح.

لا أعرف شيئًا عن أي شخص آخر، لكنني شخصيًا أشعر بالانزعاج الشديد عندما أرى شيئًا مثل:

لو(<>) (إرجاع صحيح؛) إرجاع خطأ؛

وهذا يتطلب "عودة" أنيقة (<>); " يرجى دائمًا إلقاء نظرة على الكود الخاص بك وإزالة هذا المنطق. ل كلالموقف لا تحتاج إلى عبارة IF.

أنا فقط أكتب وظيفة is_string الخاصة بي للتحقق من الأنواع وstrlen للتحقق من الطول.

الدالةemptyStr($str) (return is_string($str) && strlen($str) === 0;) printemptyStr("") ؟ "فارغة" : "ليست فارغة"; // فارغ

تحرير: يمكنك أيضًا استخدام وظيفة القطع للتحقق مما إذا كانت السلسلة لا تحتوي على.

Is_string($str) && strlen(trim($str)) === 0;

تحتوي لغة PHP على وظيفة مدمجة تسمى ()empty ويتم الاختبار عن طريق كتابة if(empty($string))(...) رابط php.net: php فارغ

لديك الجواب، ولكن في حالتك يمكنك استخدامها

العودة فارغة($الإدخال);

العودة is_string($input);

مشكلة بسيطة. يتغير:

إذا (strTemp != "")

إذا($strTemp != "")

ربما يمكنك أيضًا تغييره إلى:

إذا($strTemp !== "")

نظرًا لأن != "" سيعود صحيحًا إذا قمت بتمرير الرقم الرقمي 0 وبعض الحالات الأخرى بسبب التحويل التلقائي للنوع في PHP.

ضع في اعتبارك أيضًا أن PHP لديها بالفعل وظيفة فارغة ().

تقوم PHP بتقييم السلسلة الفارغة إلى خطأ، لذا يمكنك ببساطة استخدام:

إذا (تريم($userinput["phoneNumber"])) (/ التحقق من صحة رقم الهاتف) آخر (صدى "لم يتم إدخال رقم الهاتف"
"; }

أستخدم دائمًا التعبير العادي للتحقق من وجود سلسلة فارغة، يعود تاريخها إلى أيام CGI/Perl بالإضافة إلى Javascript، فلماذا لا PHP على سبيل المثال (وإن لم يتم اختبارها)

إرجاع preg_match("/\S/", $input);

حيث يمثل \S أي حرف بدون مسافات

فقط استخدم الدالة strlen()

إذا (strlen($s)) ( // ليس فارغًا )

لقد سألت نفسي مؤخرًا نفس السؤال.
هناك العديد من الحلول الممكنة، وهنا 3 منها صالحة:

  • s.indexOf(بادئ التشغيل) === 0
  • s.substr(0,starter.length) === كاتب
  • s.lastIndexOf(starter, 0) === 0 (تمت إضافته بعد مشاهدة إجابة مارك باير)
  • باستخدام حلقة:

    تبدأ الوظيفة بـ(s,starter) ( for (var i = 0,cur_c; i< starter.length; i++) { cur_c = starter[i]; if (s[i] !== starter[i]) { return false; } } return true; }

لم أواجه الحل الأخير الذي يتضمن استخدام حلقة.
والمثير للدهشة أن هذا الحل يتفوق بشكل كبير على الحلول الثلاثة الأولى.
إليك اختبار jsperf الذي أجريته للوصول إلى هذا الاستنتاج: http://jsperf.com/startswith2/2

ملاحظة: يقدم ecmascript 6 (harmony) طريقة startWith الخاصة به للسلاسل.
فكر في مقدار الوقت الذي كان سيتم توفيره إذا فكروا في تضمين هذه الطريقة التي تشتد الحاجة إليها في الإصدار الأول.

تحديث

لاحظ أن هناك تحسينين للحلقة قام ستيف بتضمينهما، أظهر الأول أداءً أفضل، لذا سأقوم بنشر هذا الكود أدناه:

تبدأ الوظيفةWith2(str, prefix) ( if (str.length< prefix.length) return false; for (var i = prefix.length - 1; (i >= 0) && (str[i] === prefix[i]); --ط) متابعة؛< 0; }

في PHP، تختلف القيمتان FALSE وNULL والقيم المرتبطة بهما عما هي عليه عادة في اللغات الأخرى ولها ميزاتها الخاصة غير الواضحة.
تتناول المقالة هذه الميزات.
بالنسبة للمبتدئين، قد يكون هذا مفيدًا لرؤية الصورة الكاملة؛ أما بالنسبة للقراء ذوي الخبرة، فقد يكون مفيدًا لتحديث ذاكرتهم إذا غابت عن أذهانهم بعض الفروق الدقيقة.

خطأ في عبارات If

وفقًا لوثائق PHP، تكون القيم التالية خاطئة بعد التحويل إلى القيمة المنطقية:
  • القيمة المنطقية نفسها FALSE
  • سلسلة فارغة ("") والسلسلة "0".
  • صفيف فارغ (صفيف) - صفيف ().
  • كائن يحتوي على صفر من متغيرات الأعضاء (PHP 4 فقط، لم تتم تغطيته في هذه المقالة)
  • قيمة NULL خاصة (بما في ذلك المتغيرات غير المحددة)
  • كائنات SimpleXML (لم تتم تغطيتها في هذه المقالة)
وهذا يعني أنه إذا تم تمرير هذه القيم إلى الشرط:
إذا (...) صدى "1"؛ وإلا صدى "0"؛
ثم سيتم طباعة السلسلة "0".

إذا لم يتم تعيين قيمة المتغير (غير محدد)، فقد يتم إصدار تحذير أيضًا. ولنذكرك أنه يمكن إزالة التحذير الموجود في الحالة عن طريق كتابة @ قبل المتغير.

على سبيل المثال:

إذا (@$undefVar) (...)
ولكن يجب عليك استخدام @ فقط في الحالات القصوى، عندما تفكر مليًا ولا توجد خيارات أخرى مناسبة. راجع الدالة isset() .

تقوم الدالة is_null() واللغة ببناء isset() وempty()

تقوم الدالة is_null() بإرجاع TRUE فقط للمتغيرات التي لم يتم تعيين أي قيمة لها أو التي تم تعيين القيمة NULL لها.
تُرجع isset() قيمًا منطقية فردية مقارنةً بـ is_null() .
إذا لم يتم تعيين قيمة للمتغير، فستُصدر الدالة is_null() أيضًا تحذير "متغير غير محدد"، على عكس الدالة isset()، التي لا تُصدر أي تحذير.
تذكر أنه من أجل إزالة قيمة متغير، يمكنك استخدام الدالة unset() . يمكنك أيضًا تعيين القيمة NULL لهذا الغرض لتجنب تحذيرات المترجم عند محاولة قراءة قيمة متغير.

يرجى ملاحظة أنه، على عكس المتغيرات، للعمل مع الثوابت، يجب عليك استخدام البنية المعرفة ().

تمثيل السلسلة

دعونا نلقي نظرة على تمثيل السلسلة للثوابت الخاطئة.
على سبيل المثال، يقوم التسلسل بتحويل القيم إلى السلاسل التالية، كما هو موضح في الجدول أدناه:

تم وصف موضوع التحويل إلى سلاسل بمزيد من التفاصيل على الموقع الرسمي في فقرة التحويل إلى سلسلة.

مشغلي المقارنة

دعنا ننتقل إلى عوامل المقارنة.
جميع القيم الخاطئة تعود صحيحة، كما هو متوقع، عند مقارنتها بـ FALSE باستخدام عامل التشغيل " == ".
لكن لا يجب الاعتماد على العبورية هنا عند مقارنة ثوابت السلسلة الزائفة مع بعضها البعض.
فيما يلي جدول كامل لمقارنة القيم الخاطئة (علامة الزائد تشير إلى عناصر الجدول التي، عند مقارنتها باستخدام عامل التشغيل " != "، تُرجع قيمة حقيقية:

$undef - متغير لم يتم تعيين قيمة له

يمكن استخلاص بعض الاستنتاجات اللطيفة من الجدول:
1. إذا علمنا أننا نستخدم السلاسل فقط، فيمكننا مقارنتها بأمان ولا داعي للقلق من أن "" (سلسلة فارغة) ستكون مساوية لـ "0".
2. المصفوفات لا تساوي أبدًا سلاسل أو أعدادًا صحيحة أو أرقامًا حقيقية.

بما أن أنواع الثوابت الزائفة مختلفة، فيمكن استخدام زوج من العوامل === و!== للتمييز بينها.
يقوم عامل التشغيل === بإرجاع خطأ لجميع أزواج القيم الخاطئة.
تُرجع القيمة الحقيقية فقط للوسيطات التي تم تعيين إحداها بالقيمة NULL، ولم يتم تعيين أي قيمة للثانية.

الفرق بين المتغيرات ذات القيمة NULL والمتغيرات غير المحددة

يتيح لك عامل التشغيل === التمييز بين كافة القيم الخاطئة، باستثناء المتغيرات ذات القيمة NULL من المتغيرات التي لم يتم تعيين قيمة لها.

يمكن تمييز هذه المتغيرات باستخدام الدالة get_defense_vars() .

إذا كنت بحاجة إلى تحديد ما إذا كان قد تم تعيين قيمة للمتغير $var، فيمكن استخدام مقتطف التعليمات البرمجية التالي للقيام بذلك:
إذا (array_key_exists("var"، get_defense_vars())) ( echo "تم تعريف var"; // $var تم تعيينه NULL ) else ( echo "var لم يتم تعريفه"; // $var لم يتم تعريفه أو إلغاء تعيينه($ فار) تم استدعاؤه)

الاستنتاجات

يجب أن تتذكر دائمًا أنه في PHP، قد لا تتساوى قيمتان خاطئتان مع بعضهما البعض، والمتغيرات التي تبدو مختلفة للوهلة الأولى قد يتبين أنها هي نفسها عند مقارنتها. لتجنب مثل هذه المفاجآت، يمكنك استخدام عاملي التشغيل === و!==.

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

العودة ط إذا كنت بحاجة، عند العمل مع السلاسل، إلى التحقق مما إذا كانت السلسلة فارغة، فعادةً ما يستخدم المبرمجون المبتدئون هذه الوظيفةسترلين () إذا كنت بحاجة، عند العمل مع السلاسل، إلى التحقق مما إذا كانت السلسلة فارغة، فعادةً ما يستخدم المبرمجون المبتدئون هذه الوظيفة. هذه الوظيفة سريعة جدًا لأنها لا تقوم بأي حسابات، ولكنها ببساطة تُرجع القيمة المعروفة بالفعل لطول السلسلة، المتوفرة في zval (يستخدم PHP بنية C لتخزين المتغيرات). ولكن لا يزال، لأنه - هذه دالة، وهي بطيئة بعض الشيء لأنها تتطلب عدة إجراءات عند استدعائها، مثل التحويل إلى أحرف صغيرة والبحث في جدول التجزئة. في بعض الحالات، يمكنك زيادة سرعة تنفيذ التعليمات البرمجية الخاصة بك باستخدامفارغ() - هذه دالة، وهي بطيئة بعض الشيء لأنها تتطلب عدة إجراءات عند استدعائها، مثل التحويل إلى أحرف صغيرة والبحث في جدول التجزئة. في بعض الحالات، يمكنك زيادة سرعة تنفيذ التعليمات البرمجية الخاصة بك باستخدام...، بل أيضاً

لا يزال بإمكانك تحسينه قليلاً.لنأخذ مثالا على سبيل المثالالتحقق من مسار الصورة

، تتحقق الوظيفة مما إذا كان المسار فارغًا، ثم تستبدله بمسار آخر، على سبيل المثال “images/noimage.jpg”.

  • وبالتالي فإن المهمة بأكملها تتلخص في التحقق مما إذا كان متغير من نوع السلسلة فارغًا. دعونا نجرب 4 طرق:
  • إذا (سترلين($img_path)>0)
  • إذا($img_path(0))
  • إذا (فارغ($img_path))

وطريقة أخرى للأخير.

الدالة check_image_path($img_path) ( if (strlen ($img_path ) >0 ) ( $img_path = "images/noimage.jpg" ; ) تُرجع $img_path ; )

دعونا نجري الاختبار، استغرق متوسط ​​وقت الاختبار 1.43795800209 ثانية.

بالتفكير في الأمر أكثر من ذلك بقليل... يمكنك الوصول إلى الحرف الأول من السطر مرة واحدة، بدلاً من السطر بأكمله. إذا كان الحرف الأول موجودًا، فهذا يعني أن السلسلة ليست فارغة. يتم ترقيم الحرف الأول في السطر بالرقم "0".

الدالة check_image_path($img_path) ( إذا ($img_path ( 0 ) ) ( $img_path = "images/noimage.jpg" ; ) تُرجع $img_path ; )

متوسط ​​وقت الاختبار المستغرق 1.19431300163 ثانية، 17% من وقت اللعب

دعونا نحاول الكتابة باستخدام فارغ () الآن:

الدالة check_image_path($img_path) ( إذا (فارغة ($img_path)) ( $img_path = "images/noimage.jpg" ; ) تُرجع $img_path ; )

متوسط ​​وقت الاختبار المستغرق 1.1341319084 ثانية، يتم تشغيل 5% من الوقت من المثال السابق

الآن دعونا نلقي نظرة على المثال قبل الأخير والأخير أعلاه. دعونا نرى كيف يمكن الجمع بين هذا. فكر... كيف يمكنك التحسين؟

الدالة check_image_path($img_path) ( إذا (فارغة ($img_path ( 0 ) ) ( $img_path = "images/noimage.jpg" ; ) تُرجع $img_path ; )

متوسط ​​وقت الاختبار المستغرق 1.07465314865 ثانية، ومرة ​​أخرى فزنا بنسبة 5% من الوقت...

كيف يعمل ولماذا هو أسرع؟ لكن $img_path(0)تقوم بإرجاع الحرف الأول... ثم الوظيفة - هذه دالة، وهي بطيئة بعض الشيء لأنها تتطلب عدة إجراءات عند استدعائها، مثل التحويل إلى أحرف صغيرة والبحث في جدول التجزئة. في بعض الحالات، يمكنك زيادة سرعة تنفيذ التعليمات البرمجية الخاصة بك باستخداميتحقق من وجود سلسلة فارغة... والفرق عن المثال السابق هو أنه يتم تمرير حرف واحد فقط إلى الوظيفة، وليس السلسلة بأكملها. وهكذا فزنا من المثال الأول إلى الأخير 25% وقت.

لقد نجحت البرمجة الحديثة في التعامل مع المتغيرات غير المكتوبة لفترة طويلة. لا يمكن تحديد نوع المتغير مسبقًا ويمكن تغييره أثناء تنفيذ البرنامج.

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

عن فارغة وغير موجودة

الدالة PHP () الفارغة هي عكس الدالة isset () ولها بعض ميزات الاستخدام الخاصة. إذا لم يكن هناك متغير فإن الدالة الأولى تستجيب إيجابيا ونتيجتها صحيحة، والدالة الثانية تستجيب سلبا أي أن قيمتها ستكون خاطئة.

بحكم التعريف، تم تصميم isset() للتحقق من وجود متغير. لا يهم ماذا وكيف تم تعيين المتغير، الشيء الرئيسي هو أنه موجود ولا يتم تدميره بواسطة الدالة unset(). ستكون نتيجة الدالة isset() موجبة - صحيحة. من المهم أن تتذكر أنه إذا كان $iVar = 0; فإن isset($iVar) سيكون صحيحًا، ولكن فارغ($iVar) سيكون صحيحًا أيضًا.

في الحالة الأولى، النتيجة تعني أن المتغير موجود، في الحالة الثانية، المتغير فارغ، أي القيمة "0" بأي شكل من الأشكال، سواء كانت سلسلة ("0") أو رقم (كسري - 0.0 أو عدد صحيح - 0) هو نفسه: فارغ($iVar) سيكون صحيحًا.

حول الأمن والسيطرة

تدل الممارسة على أن اللغات غير المكتوبة تمنح المبرمج قدرًا أكبر من الحرية، ولكنها تفترض أن موقفه من العمل على الخوارزمية يكون أكثر مسؤولية.

تقدم لغة PHP صيغة حديثة تدعم الدلالات الراسخة، وتحتوي على عدد قليل من الأخطاء، ولكنها تتطلب اهتمامًا دقيقًا. على سبيل المثال، يتطلب استدعاء أي دالة عددًا معينًا من المعلمات.

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

في هذا السياق، تعد وظيفة PHP الفارغة () ضرورية. تعبير:

$a = "1;2" + 20

سيتم تعيين القيمة 21 للمتغير $a، حيث سيتم تمثيل الجزء الأول من التعبير كـ 1، والثاني سيكون 20.

ستكون النتيجة من النوع رقم وستكون النتيجة لوظيفة PHP الفارغة($a) - false، أي أن المتغير $a ليس فارغًا.

وفي هذا السياق لها وظيفة:

funcTest($a ​​​​= 0, $b = 20)

عند الاتصال:

$res = funcTest($aVal, $bVal)

سيكون له ما هو مرغوب فيه، أي نتيجة الوظيفة. وعندما دعا:

  • $res = funcTest($aVal.$bVal)

يحتوي نص الدالة على معلمة واحدة فقط بالقيمة "$aVal . $bVal" ومن المرجح أن يتم تفسير هذه المعلمة على أنها سلسلة من الأحرف.

PHP فارغ () للكائنات والمصفوفات

يحتوي بناء جملة اللغة على عدد كاف من البنيات والوظائف للعمل مع الكائنات والمصفوفات، ولكن من وجهة نظر التحقق من وجودها ووجود قيمة، لا توجد اختلافات خاصة عن المتغيرات.

PHP فارغ (مصفوفة) - يعادل استدعاء فارغ (متغير بسيط). ومع ذلك، هناك اعتبارات هامة للغاية فيما يتعلق بالأشياء. أما بالنسبة للتحقق من وجود كائن (isset)، فإن السؤال ليس له أي معنى. أما بالنسبة لوظيفة PHP الفارغة()، فإن مدى استصواب استخدامها يظل موضع شك.

وفقًا لمنطق البرمجة كائنية التوجه، فإن الكائن له محتواه الخاص ومجموعة الأساليب الخاصة به. فقط الكائن نفسه يمكنه معرفة ما إذا كان فارغًا أم لا، ولكنه ليس وظيفة خارجية، حتى لو كان جزءًا من بناء جملة اللغة.

كائن ووظيفته فارغة ()

وعلى هذا الأساس البسيط، ولكن المشروع، ينبغي النظر إلى كل كائن في سياق فهمه لـ "الفراغ". على سبيل المثال، يتكون تطبيق كائن "جدول التوظيف" من سجلات "الموظف". ولكن إذا لم يكن هناك موظف واحد، ففي "قائمة الموظفين" هناك دائمًا خيارات لمناصب الموظفين المحتملين.

على أي مستوى يجب أن أستخدم وظيفة الكائن الفارغ PHP هنا؟ على مستوى "التوظيف"، كل شيء موجود، حتى لو لم يكن هناك موظف واحد. على مستوى "الموظف"، يكون الكائن موجودًا بالفعل، حتى لو لم يتم ملؤه بالكامل. يمكن تصنيف الكائن غير المملوء بالكامل على أنه كائن فارغ. ليس هناك فائدة منه إلى جدول التوظيف.

اعتمادًا على أسلوب برمجتك، تعتبر وظائف PHPempty() و isset() مهمة جدًا لبناء خوارزمية آمنة وموثوقة، ولكن بالنسبة للكائنات، لا يزال من الأفضل أن يكون لديك متغير فارغ() محدد بواسطة محتواها.