اذهب إلى المحتوى

السؤال

نشر

سلام عليكم

اواجه تحذير خفيف اللهجة من phpstorm كالتالي

Strict types declaration is missing

و عندما اقوم بالاصلاح يقوم باضافة السطر التالي تلقائيا للملف

declare(strict_types=1);

السؤال ، ما معنى هذا الكود ببساطة ، انا قرات عنه في المواقع الاجنبيه بس مش مستوعب

هايفيدني بايه وجود السطر ده في الملفات الخاصة بي و عدم وجوده هايضرني في ايه ؟

Recommended Posts

  • 1
نشر

يجب أولاً أن تعلم بوجود ما يسمى بال Scalar types والذي يعني نوع بيانات يحمل قيمة واحدة مثل  Integer, string, float ,boolean

عكسه لدينا الcompound types مما يعني نوع بيانات يحمل أكثر من قيمة مثل  array, map , حسناً , نرجع لسؤالك ماهو الstrict types? كما تعلم على الرغم من توافر إمكانية تعريفك للمتغير كنوع معين مثل


  function test(int $a, float $b) : int
  {
      return $a + $b;
  }
 
  test("sharaf",4)

هنا قمنا بتعريف الparameters التي تمر بالدالة test أنهم من النوع  int & float على الرغم من ذلك قمنا بتمرير parameters من النوع string, int ومع ذلك سيعمل البرنامج دون أن يلقي خطأ, فائدة الstrict decleration أن يقوم بإلقاء خطأ عند محاولة تمرير بيانات من نوع غير المطلوب, وذلك لضمان أن يقوم المبرمج بكتابة برنامج منظم بشكل أكبر وأسهل للقراءة وأقل عرضة للbugs , فمثلاً الكود بالأعلى إن قمنا بتشغيله عند تفعيل الوضع الصارم(strict declaration) سيقوم بإلقاء خطأ

Fatal error: Uncaught TypeError

 

  • 1
نشر

في لغة PHP يمكنك التصريح عن نوع متحول ما لسهولة التطوير حيث سيستخدم المحرر هذه التصاريح لمساعدتك في التطوير (ينبهك في حال تمرير متحول من نوع بدل آخر)

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

// تابع لحساب ناتج ما، يتوقع منه إعادة عدد صحيح
function calculate(int $a, int $b){
	return $a + $b;
}

$user->balance = calculate(5, 3.5); // $user->balance = 8 ناتج خطأ

   لتجنب هذه المشاكل فإن المحرر يقترح عليك كتابة declare(strict_types=1) في رأس الملف وذلك سيخبر PHP عند تنفيذ الشيفرة أن يلتزم بتصاريح الأنواع التي حددتها ويرمي خطأ في حال كانت الأنواع غير متطابقة

ذلك سيجنبك الخطأ السابق فعند تنفيذ السطر التالي لن يتم حساب نتيجة خطأ دون أن تشعر ولكن سيتوقف التنفيذ ويظهر خطأ

$user->balance = calculate(5, 3.5); // Fatal error: Uncaught TypeError

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...