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

Hassan Hedr

الأعضاء
  • المساهمات

    2846
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    38

إجابات الأسئلة

  1. إجابة Hassan Hedr سؤال في مشكلة في إعداد xdebug مع VSCode كانت الإجابة المقبولة   
    تأكد أن نسخة php التي تستخدمها هي في المسار نفسه لملف الإعدادات php.ini، بتنفيذ الأمر التالي سيتم عرض أماكن برامج php التنفيذية بالترتيب، تأكد أن أول نتيجة هي في نفس مسار ملف الإعدادات، وإلا حاول إضافة إعدادات XDebug للملف الخاص بذلك المسار:
    where php وحاول إضافة الإعداد التالي لقسم إعدادات xdebug ضمن php.ini 
    xdebug.idekey = VSCODE  
  2. إجابة Hassan Hedr سؤال في استخدام bootstrap في مشروع React Native كانت الإجابة المقبولة   
    مكتبة Bootstrap تعتمد على تنسيقات CSS لإضافة التنسيقات للمكونات ضمن صفحات الويب، React Native لتطبيقات الجوال لا يمكنها استخدام تنسيقات CSS، فهي تقنية مستخدمة ضمن متصفحات الويب فقط وليس ضمن التطبيقات الأصلية Native، التنسيقات يمكن التعبير عنها بكائنات Objects فيها مفاتيح لخواص التنسيقات تُشبه بأسمائها تنسيقات CSS،
    يمكن تثبيت واستخدام مكتبة react-native-bootstrap-styles التي تحوي كائنات تنسيقات تطابق أسمائها أسماء الأصناف في Bootstrap كالتالي: 
    const { styles: s, constants: c } = bootstrapStyleSheet; ... <View style={[s.body]}> <View style={[s.container, s.h100, s.justifyContentCenter]}> <Text style={[s.text, s.title]}>مرحبًا</Text> </View> </View>  
  3. إجابة Hassan Hedr سؤال في ما الفرق بين المكون ScrollView  والمكون FlatList في React Native؟ كانت الإجابة المقبولة   
    كلا المكونين يستخدمان لإظهار قائمة طويلة يمكن التمرير scrolling عبرها:
    ScrollView يُستخدم لعرض أي نوع من البيانات داخله، كمكون ذو ارتفاع أكبر من الشاشة حتى يتمكن المستخدم من التمرير ومشاهدة المكون بأكمله. FlatList مخصص لعرض البيانات المتكررة حيث يعرضها أيضًا ضمن تنسيق قابل للتمرير scrolling. الفرق أن ScrollView يُحمل المكونات داخله مباشرة إلى الذاكرة، بينما يُحمل المكون FlatList فقط المكونات الظاهرة على الشاشة للمستخدم، ويُحمل باقي المكونات عند التمرير عليها ويفرغ من الذاكرة المكونات التي أصبحت خارج الشاشة، لذا نستخدم المكون FlatList عند عرض قوائم بيانات طويلة لتوفير استخدام الذاكرة، أما ScrollView خلاف ذلك.
     يمكنك القراءة أكثر في صفحة مرجع المكون FlatList وصفحة استخدام المكون ScrollView، والاستفادة من المقال التالي:
     
  4. إجابة Hassan Hedr سؤال في التحقق من مدخلات المستخدم في لغة php بشكل صحيح isset - empty كانت الإجابة المقبولة   
    لا مشكلة في كتابة الشيفرة كذلك، التحقق من وجود قيمة ضمن الطلب والتصرف على أساسها لتعيين الاستعلام الحاصل والاستفادة من العبارة الشرطية if طريقة سليمة، لكن بما أنك استخرجت القيمة سابقًا ووضعتها ضمن متغير يمكنك التحقق من ذلك المتغير، قد تضيف لاحقًا معالجة لتلك القيمة خلال استخراجها فتضيفه في الأعلى فقط ولا تغير الشرط كالتالي:
    $IDCat = $_GET['IDCat']; if($IDCat == '310') { // معالجة وجود القيمة ... } يمكنك الاطلاع أكثر على الجمل الشرطية في PHP وطرق استخدامها من المقال التالي:
     
  5. إجابة Hassan Hedr سؤال في استفسار عن LEFT JOIN في php كانت الإجابة المقبولة   
    لذا الأمر يعتمد على طبيعة تصميم قاعدة البيانات، وهنا دورك كمطور أو خبير تصميم قواعد البيانات في إجاد الشكل الأنسب لتصميم الجداول وربطها بحيث تحقق المطلوب،
    أنصحك بقراءة كتاب تصميم قواعد البيانات، فهو يشرح التفاصيل المتعلقة بطريقة التصميم الأمثل لقواعد البيانات: 
     
  6. إجابة Hassan Hedr سؤال في كيف أتخطى مرحله المبتدئ في البرمجة واصبح مبرمج متقدم كانت الإجابة المقبولة   
    بالتطبيق المستمر سيتقدم مستواك في لغات البرمجة التي تستخدمها، وتبدأ تتآلف مع الأنماط وطرق حل المشاكل الشائعة، وطرق فصل وجمع الشيفرات وكيفية ترتيبها ضمن وحدات وربطها مع بعضها، وستملك مهارة كتابة مكتبة أو أداة خاصة بك من الصفر، عندها ستستطيع عند مواجهة مشكلة في مكتبة أو أداة ما أن تتصفح الشيفرة المصدرية لها إذا كانت مفتوحة المصدر، وتحدد مشكلتك أو الميزة التي ترغب بإضافتها، وستستطيع تقديم التطوير على تلك المكتبة، وإذا وافق صاحب المكتبة عليها ستصدر نسخة جديدة متضمنة تعديلاتك وتكون حللت مشكلة أو أضفت ميزة،
    أنصحك بالتركيز أولًا على الأساسيات وفهم اللغة جيدًا، والتطبيق العملي المتكرر والبحث والسؤال عن المشاكل، فهو الوحيد الذي يجعلك تتخطى مرحلة المبتدئ، وحاول قراءة الشيفرة المصدرية للمكتبات التي تستخدمها أيضًا ستتعلم الكثير من ذلك عندما ترى عمل مبرمجين آخرين متقدمين عنك،
    يمكنك الاستفادة من قراءة المقالات التالية: 
     
  7. إجابة Hassan Hedr سؤال في قراءة قيمة حقل إدخال من خاصية value في جافاسكربت يعطي خطأ و undefined كانت الإجابة المقبولة   
    لديك العديد من الأخطاء:
    btn.click لا تمرر إلى التابع addEventListener بل تعرف بمفردها كالتالي: btn.onclick = function createTweet(){ ... }  
    يوجد خطأ  في ذكر اسم المكون الجديد عند تحديد قيمة innerHTML له، يجب المحافظة على ذكر اسم المتغير كما هو في كل مكان: newtweet.innerHTML = inp.value; ^^^^^^^^  
    يجب إلغاء الحدث الأساسي وهو إرسال بيانات النموذج، يتم ذلك عبر التابع preventDefault كالتالي: btn.onclick = function createTweet(e){ e.preventDefault(); ... }  
    يجب نقل خواص التنسيق إلى ملف CSS وليس معالجتها ضمن جافاسكربت، وذلك لتجنب الأخطاء: .feed-tweet1 { display: flex; }  
    أنصحك بالتأني ومراجعة الأساسيات، من أساسيات لغة جافاسكريبت نفسها واستخدام الدوال فيها، ومعالجة الأحداث باستخدامها، يمكنك الاستفادة من المقالات التالية:
     
  8. إجابة Hassan Hedr سؤال في ما فائدة إضافة علامة & إلى بداية اسم التابع method موجود في صنف class في PHP؟ كانت الإجابة المقبولة   
    تستخدم للدلالة على أن القيمة التي يعيدها التابع إذا كانت ساكنة static، يمكن أن تطلب كمرجع reference وليس كقيمة value، وذلك عبر إضافة "&" قبل اسم الدالة أيضًا عند الاستدعاء، مثال للتوضيح:
    لتكن لدينا الدالة التالية:
    function &getVariable() { static $var = 2; return $var; } يمكن أن تُستدعى بشكل طبيعي ولا نلاحظ أي تصرف مختلف:
    $var = getVariable(); echo $var; // 2 $var = 5; echo getVariable(); // 2 وفي حال استدعينا الدالة بطلب القيم كمرجع، ثم عدلنا قيمة المتغير في الخارج، سنلاحظ تغير القيمة الثابتة عند الاستدعاءات اللاحقة:
    $var = &getVariable(); echo $var; // 2 $var = 5; echo getVariable(); // 5 حاول تجنب هذه الطريقة قدر الإمكان فهي تُصعب من عملية الصيانة وإصلاح الأخطاء خصوصًا في التطبيقات المتوسطة والكبيرة، إلا إذا كنت تطور أداة أو إطار عمل خاص وهذه الميزة قد تفيدك.
     
  9. إجابة Hassan Hedr سؤال في كيفية إرسال بيانات form بدون الضغط على زر submit؟ كانت الإجابة المقبولة   
    يمكن إضافة شيفرة جافاسكربت والاستفادة من الحدث change الذي يُطلق عند كل تغيير لقيمة حقل الإدخال، وداخل تابع المعالجة يمكنك استخراج القيمة الجديدة للحقل وتحديث باقي العناصر حسب المطلوب، كالتالي:
    const input = document.querySelector('...') // جلب عنصر حقل الإدخال input.addEventListener('change', function(e) { // حدث يُطلق عند كل تغيير لقيمة الحقل const value = e.target.value; // القيمة الجديدة //.. نحدث باقي العناصر بالقيمة الجديدة }) يمكنك الاستفادة من قراءة المقال التالي:
     
  10. إجابة Hassan Hedr سؤال في أبحث عن طريقة لإضافة شيفرة جافاسكريبت للحماية من إدراج بيانات متكررة في PHP كانت الإجابة المقبولة   
    في هذه الحالة يجب استخدام طلبات AJAX، يمكن الاستفادة من الحدث change على حقل الإدخال لإرسال طلبات إلى الخادم للاستعلام عن القيمة الحالية كالتالي:
    <script> document.querySelector('input[name=code]').addEventListener('change', function(e) { const code = e.target.value; // إرسال طلب للاستعلام fetch(`/?code=${code}`) .then(res => res.text()) .then(nameExists => nameExists == 1 ? showError('الاسم مسجل مسبقًا')) : clearError(); }); function showError(message) { // .. HTML إظهار رسالة الخطأ ضمن } function clearError(){ // .. إخفاء رسالة الخطأ } </script> وضمن شيفرة php يمكن تلقي القيمة q من GET_ وإرسال رد إما ب 1 أو 0 ليعبر وجود الاسم مسبقًا أم لا (من الضروري طباعة النتيجة وإنهاء الطلب مباشرة لأنه طلب استعلام فقط )كالتالي:
    <?php if(isset($_GET['code']){ $code = $_GET['code']; $ser = $database->prepare("SELECT * FROM `test` WHERE CODE = $code"); $ser->execute(); echo count($ser->fetchAll()) > 0 ? "1" : "0"; // طباعة نتيجة الاستعلام exit(); // انهاء الطلب }  
  11. إجابة Hassan Hedr سؤال في لماذا الخاصية hover غير متاحة للعنصر after في CSS؟ كانت الإجابة المقبولة   
    لا يمكن استهداف الحالة hover للعنصر after مباشرة، فكما تلاحظ حتى ضمن أدوات المطور لا يمكنك تفعيلها، ما يمكنك فعله بدلًا من ذلك هو عند وضع المؤشر فوق العنصر صاحب الصنف submit-wrapper أن يتم تغيير تنسيقات العنصر after، ذلك ممكن بتغيير المحدد إلى التالي:
    .form-section .submit-wrapper:hover::after { .. } التنسيقات في هذا المحدد سيتم تطبيقها على العنصر after
  12. إجابة Hassan Hedr سؤال في كيفية دمج كائنين Objects معًا في كائن واحد في PHP؟ كانت الإجابة المقبولة   
    يمكن باستخدام تحويل النوع الصريح لتحويل كلا الكائنين إلى مصفوفة ترابطية associative عبر النوع array كالتالي:
     
    <?php (array) $obj1; // ["a" => "a", "b" => "b"] (array) $obj2; // ["c" => "c", "d" => "d"] ثم نستفيد من التابع array_merge لدمج المصفوفتين الناتجتين في مصفوفة واحدة كالتالي:
    <?php array_merge((array) $objectA, (array) $objectB); // ["a" => "a", "b" => "b", "c" => "c", "d" => "d"] ثم يمكن تحول المصفوفة الناتجة إلى كائن مجددًا عبر النوع object كالتالي:
    <?php $newObj = (object) array_merge((array) $objectA, (array) $objectB); echo $newObj->a; // a echo $newObj->b; // b echo $newObj->c; // c echo $newObj->d; // d لكن هذا النوع من الدمج محدود ويقوم بدمج الخصائص العامة فقط ولا يدمج التوابع
  13. إجابة Hassan Hedr سؤال في هل المخطط التدفقي Flowchart لدي صحيح؟ كانت الإجابة المقبولة   
    المخطط التدفقي صحيح، والهدف من البرنامج حساب العاملي Factorial لعدد يتم إدخاله، بما أن عملية الضرب تبديلية فكلا المثالين متساويين:
    6 × 5 × 4 × 3 × 2 × 1 = 1 × 2 × 3 × 4 × 5 × 6 فلا مشكلة في البدء من الرقم الذي أدخله المستخدم إلى الواحد، أو من الواحد إلى الرقم المطلوب، لكن يوجد ملاحظة هامة وهي توحيد أسماء المتغيرات ضمن المخطط والالتزام بشكل واحد منها، مثلًا فقط استخدم الكلمات التالية Num - Counter - Factorial
    أيضًا لم تعالج حالة إدخال المستخدم لعدد أصغر أو يساوي الصفر 
     
  14. إجابة Hassan Hedr سؤال في كيف يمكن الوصول إلى العنصر الذي تلقى الحدث بشكل ديناميكي في جافاسكريبت؟ كانت الإجابة المقبولة   
    يمكنك بعد الاستعلام عن قائمة العناصر المراد إضافة معالج الحدث click لها، المرور على عناصرها كمصفوفة عادية وإضافة تابع لمعالجة الحدث، ضمن التابع الكلمة this ستشير إلى العنصر الحالي الذي تلقى الحدث، كالتالي:
    // 01 - استعلام عن العناصر var tags = document.querySelectorAll('[data-gh="go"]'); // 02 - المرور على العناصر tags.forEach(function (button) { // 03 - إضافة معالج الحدث button.addEventListener("click", function () { document.getElementById(this.dataset.id).style.display = "block"; }) ^^^^ }); أو يمكنك أيضًا الإشارة إلى العنصر فورًا من داخل الحلقة كالتالي:
    tags.forEach(function (button) { button.addEventListener("click", function () { document.getElementById(button.dataset.id).style.display = "block"; }) ^^^^^^ }); الطريقة الأولى مفيدة في حال أردت تعريف تابع المعالجة في مكان منفصل، لذا نستخدم this للإشارة إلى العنصر الذي تلقى الحدث، كالتالي: 
    tags.forEach((button) => button.addEventListener("click", handleClickEvent)); function handleClickEvent() { document.getElementById(this.dataset.id).style.display = "block"; }  
  15. إجابة Hassan Hedr سؤال في ما هو الأنسب بين Grid و Flex في تنسيق الموقع الإلكتروني؟ كانت الإجابة المقبولة   
    لكل منهما وظيفة يتميز بها، بشكل عام الفرق بينهما كالتالي:
    Flex: تستخدم لتنسيق تموضع العناصر معًا على نفس المحور، أي بشكل أفقي أو بشكل عمودي Grid: تستخدم لتنسيق تموضع العناصر على بعدين أفقي وعمودي معًا، حيث يمكن تحديد مساحات معينة تضع فيها عنصر ما
    في حال كان المطلوب هو تنسيق عدة عناصر على الصفحة كاملة، Grid تعد الخيار الأنسب، أما في حال كانت العناصر بسيطة ومطلوب تنسيقها على محور واحد Flex تكون مناسبة في هذه الحالة،
    يمكنك الاستفادة من قراءة المقالات التالية:
     
  16. إجابة Hassan Hedr سؤال في ما هي فائدة عمل getters و setters في الأصناف Class في البرمجة الكائنية OOP؟ كانت الإجابة المقبولة   
    ليس فقط في الأصناف Classes، بما أن الأصناف مبنية فوق الكائنات Objects فالخواص يمكن استخدامها ضمن الكائنات أيضًا، get و set يمكنهما الربط بين خاصية ضمن الكائن (أو الصنف) مع تابع يتم تنفيذه عن كل وصول إلى الخاصية أو كل تعيين لقيمة جديدة للخاصية،
    لنأخذ المثال التالي كائن يعبر عن شخص:
    const person = { firstName: 'Emad', lastName: 'Saif', fullName: 'Emad Saif' } خاصية الاسم الكامل fullName بدلًا من كتابتها بشكل ثابت ضمن الكائن ما قد يعرضنا لأخطاء في ذلك أو نسيان لتعيينها، يمكننا حساب تلك الخاصية من الخاصيتين firstName و lastName في كل مرة نحاول الحصول على قيمة الخاصية، هنا نستفيد من get عبر ربط الخاصية بتابع يعيد قيمة الخاصية، ينفذه جافاسكريبت تلقائيًا في كل مرة نحاول الوصول للخاصية،
    يصبح الكائن كالتالي:
    const person = { firstName: 'Emad', lastName: 'Saif', get fullName(){ // نحسب ونعيد قيمة الخاصية return this.firstName + ' ' + this.lastName; } } console.log(person.fullName) // 'Emad Saif' بنفس المبدأ يمكن استخدام الخاصية set لتعيين قيمة خاصية ما ديناميكيًا عبر استدعاء تابع وتغيير قيم الخواص من داخل التابع،
    في مثالنا يمكننا تعيين قيمة fullName مباشرة وداخلها نقوم بتغيير الاسم الأول والكنية كالتالي:
    const person = { firstName: 'Emad', lastName: 'Saif', get fullName(){ return this.firstName + ' ' + this.lastName; }, set fullName(value){ const [firstName, lastName] = value.split(' '); this.firstName = firstName; this.lastName = lastName }, } person.fullName = 'Bilal Hasan'; console.log(person.firstName) // 'Bilal' console.log(person.lastName) // 'Hasan' بنفس المبدأ يمكننا تغيير صيغة التعريف من كائن إلى صنف ليصبح المثال كالتالي:
    class Person { constructor(firstName, lastName) { this.firstName = firstName; this.lastName = lastName } get fullName(){ return this.firstName + ' ' + this.lastName; } set fullName(value){ const [firstName, lastName] = value.split(' '); this.firstName = firstName; this.lastName = lastName } } const person = new Person('Emad', 'Saif') // get console.log(person.fullName) // 'Emad Saif' // set person.fullName = 'Bilal Hasan'; console.log(person.firstName) // Bilal console.log(person.lastName) // Hasan يمكنك الاستفادة من قراءة المقال التالي:
     
  17. إجابة Hassan Hedr سؤال في هل دورة بايثون تشمل تطوير النظم الخلفية باك ايند ؟ كانت الإجابة المقبولة   
    دورة تطوير التطبيقات باستخدام لغة Python ستتعلم خلالها أساسيات بايثون، ثم ستستخدم اللغة لتطوير عدة تطبيقات كاملة باستخدام أشهر أطر العمل مثل Django و Flask، التطبيقات هي تطبيقات Fullstack أي ستتعلم خلالها بناء تطبيق كامل من واجهة المستخدم إلى بناء منطق التطبيق وتخزين بياناته وجلبها من قاعدة البيانات،
    يوجد مسار مخصص ل Flask لبناء واجهة برمجة تطبيات API، وهو مسار مخصص لبناء نظام خلفي Backend،
    يمكنك الاطلاع على صفحة الدورة مذكور فيها كل النقاط التي تغطيها الدورة مع فيديوهات مقتنطفات وشروحات عن الدورة،
    بالتوفيق لك
  18. إجابة Hassan Hedr سؤال في عدم تشغيل الشيفرة عند تنفيذ الجمل لشرطية في الجافاسكريبت كانت الإجابة المقبولة   
    الخطأ لديك في جملة شرط المقارنة استخدمت معامل الإسناد "=" بدلًا من معامل المساواة "=="، لحل المشكلة عدل الشرط ليصبح كالتالي:
    if (iconsBtn[i].innerHTML == `<i class="fa-solid fa-circle-plus"></i>`){ ^^ }  
  19. إجابة Hassan Hedr سؤال في هل يوجد محتوى عربي لتعلم Sass؟ كانت الإجابة المقبولة   
    يوجد مقالات عدة منشورة عن تقنية Sass ضمن الأكاديمية يمكنك الاستفادة من قراءتها، ستتعلم فيها أساسيات Sass مع بعض الأمثلة العملية عن استخدامها:
     
    يمكنك أيضًا الاستفادة من مشاهدة الفيديو التالي الذي يشرح أساسيات استخدام Sass:
     
  20. إجابة Hassan Hedr سؤال في معالجة الخطأ التالي: Uncaught SyntaxError: Identifier 'iconsBtn' has already been declared في جافاسكريبت كانت الإجابة المقبولة   
    يرجى في المرات القادمة فقط إرفاق الشيفرة ضمن نص السؤال مع تنسيقها بشكل مناسب وعدم إرفاق ملفات المشروع، السبب في المشكلة هو ترتيب ظهور العناصر فوق بعضها حيث عنصر الصورة يغطي الزر ويمنع الضغط عليه، يمكن حل المشكلة بإضافة التنسيق التالي:
    .card-icon { z-index: 1; }  
  21. إجابة Hassan Hedr سؤال في استفسار بشان تعلم البرمجة والرياضيات كانت الإجابة المقبولة   
    يمكن توظيف البرمجة في مجالات عدة تستخدم الرياضيات بشكل كبير، مثل تحليل البيانات والإحصاء ومجال تعلم الآلة، حيث تعتمد تلك المجالات على عدة نماذج رياضية لتطوير تطبيقات مفيدة،
    من أفضل اللغات التي تساعدك في هذا المجال هي لغة بايثون، فهي لغة سهلة التعلم وقوية وتركز على الانتاجية، وتملك الكثير من المكتبات المختصة في المجالات الرياضية التي تساعدك في هذا المجال، يمكنك البدء أولًا بتعلمها، يمكنك الاستفادة من سلسلة مقالات دليل تعلم بايثون والدرس الأول منها:
    والاستفادة من مقالات تشرح تطبيقات رياضية باستخدام لغة بايثون، كالمقالات التالية:
    يمكنك القراءة والتعلم عن مجال الذكاء الاصطناعي وتعلم الآلة بداية، فهو متشعب وخلال اطلاعك على المجال ستتعلم عن الكثير من النماذج الرياضية وحلول تحليل البيانات، كتاب مدخل إلى الذكاء الاصطناعي سيفيدك كثيرا للتعرف على هذا المجال:
    والاستفادة من المقالات المنشورة في تطبيقات هذا المجال التالية:
     
  22. إجابة Hassan Hedr سؤال في جلب المعلومات من قاعدة البيانات في react js كانت الإجابة المقبولة   
    بنفس الطريقة بعد جلب البيانات من الخادم يمكنك معالجتها وتمريرها للمكون Chart باستخدام map، مثلًا إذا أردت رسم مخطط يوضح اسم كل موظف مع قيمة راتبه يمكنك تطبيق ذلك كالتالي:
    const employeeData = employeeList.map(employee => ({name: employee.name, wage: employee.name}); //.. <Chart data={ employeeData } title="رواتب الموظفين" grid dataKey="wage"/> هنا عدلنا شكل البيانات القادمة لتصبح من الشكل التالي:
    [ { name: '...', wage: ... }, ... ] ومررناها إلى Chart مع تعيين المفتاح إلى القيمة wage من خلال الخاصية dataKey
  23. إجابة Hassan Hedr سؤال في أريد دورة تدريبية لتعلم لغة بايثون كانت الإجابة المقبولة   
    ضمن الدورات التي توفرها الأكاديمية يوجد دورة مختصة بتطوير التطبيقات باستخدام لغة Python تغطي النقاط التالية:
    تعلمك أساسيات البرمجة بلغة بايثون تطوير تطبيقات برمجية بلغة بايثون التعرف على أساسيات إطار العمل جانغو Django تطوير متجر إلكتروني باستخدام جانغو Django تطوير واجهة برمجية API باستخدام فلاسك Flask ستأهلك الدورة لتملك مهارات تطوير التطبيقات العملية باستخدام لغة بايثون، وتستطيع بعدها تنفيذ المشاريع الحقيقية باستخدام مهاراتك
    في البداية يوجد صعوبة نسبية في تعلم أي مجال جديد، لكن مع التمرين والتطبيق العملي تكتسب المهارة مع الوقت وتطور من نفسك
    بالتوفيق لك  
  24. إجابة Hassan Hedr سؤال في لماذا نستخدم الكلمة this في الدالة البانية constructor في لغة JavaScript؟ كانت الإجابة المقبولة   
    في حال كنت تريد اعتبار الكائن عحاوية للخصائص ضمنها وللتوابع الخاصة للتعامل مع تلك الخصائص هنا يأتي دور البرمجة كائنية التوجه وتعريف المفهوم كصنف ضمن التطبيق، مثال يمكنك بعد تعريف الكائن الإشارة لاحقًا للخصائص التي يحتويها، وهنا يأتي دور الكلمة this حيث تعين قيم الخصائص على كل كائن جديد يتم إنشاؤه باستخدام new:
    function Person(name) { this.name = name; this.sayHi = () => console.log("My name is " + this.name); } const emad = new Person("Emad"); // لاحقا يمكن التالي emad.sayHi(); // My name is Emad console.log(emad.name) // Emad بينما في حال تعريفك للمفهوم على شكل تابع، فأنت تعامله كإجرائية تنفذ مرة واحدة وتنسى، أي لا يمكنك لاحقًا الاستفادة من الخواص الممررة للتابع، هي مجرد عمل ينفذ في كل مرة يستدعى التابع، يسمى هذا الأسلوب بالبرمجة الوظيفية ،مثال:
    function Person(name) { console.log("My name is " + this.name); } // يستدعى في كل مرة نريد التنفيذ Person("Emad"); // My name is Emad Person("Bilal"); // My name is Bilal يمكنك الاستفادة من قراءة المقالات التالية:
     
  25. إجابة Hassan Hedr سؤال في كيفية إضافة أمر مجدول cron jobs في الإستضافة كانت الإجابة المقبولة   
    الأمر المجدول يجب أن ينفذ عدة مرات في اليوم بشكل دائم، لذا بدل من تنفيذه يدويًا كل مرة يمكن إنشاء Cron Job يصف الأمر المراد تنفيذه والفترة الزمنية الواجب إعادة تنفيذه بعدها،
    ضمن الحقل Command أضف الأمر التالي: cd public_html && php artisan schedule:run >> /dev/null 2>&1  
    ضمن باقي الحقول ضع نجمة "*"، يمكنك أيضًا أن تجد الإعدادات جاهزة من قائمة Common Settings أضف الأمر المجدول بالضغط على Add New Cron Job سيتم تنفيذ الأمر تلقائيًا بعد ذلك، لكن تأكد أن جذر التطبيق لديك موجود ضمن public_html وإلا عدل هذا المسار ضمن الأمر المضاف إلى مسار جذر مشروع لارافل لديك
×
×
  • أضف...