محمود موسى2 نشر 13 فبراير 2021 أرسل تقرير نشر 13 فبراير 2021 السلام عليكم أنا جديد في البرمجة كائنية الوجه وواجهتني مشكلة جعل المتغير $conn متغير global داخل الكلاس حينما أريد جعل المتغير global داخل function أقوم بكتابة الكود التالي global $conn; فعندما كتبته داخل class بدل من function واجهتني مشكلة ذات خطأ: Parse error: syntax error, unexpected token "global", expecting "function" or "const" in C:\xampp\htdocs\private\teachers.php on line 10 فما الحل؟ الكود المستخدم 2 اقتباس
0 Wael Aljamal نشر 13 فبراير 2021 أرسل تقرير نشر 13 فبراير 2021 إذا كنت تقصد تعريف خاصية مشتركة لجميع الأغراض التي سوف تبنيها من الصنف teachers فعليك استخدام محدد الوصول static تعديل إضافة أمثلة: استخدام static ضمن صنف class: class Foo { static $my_var = 'Foo'; } $x = new Foo(); // انشاء غرض جديد echo $x::$my_var; // للوصول للمتحول المشارك نستخدم النقطتين echo $x->my_var; // هذه الطريقة لا تعمل وسيظهر الخطأ Notice: Undefined property: Foo::$my_var لاحظ في المثال التالي أن المتغير الذي نوعه static سيكون مشترك و سيحافظ على التغييرات التي تحصل عليه حتى لو من غرض مختلف. <?php function keep_track() { STATIC $count = 0; $count++; print $count; print "<br />"; } keep_track(); keep_track(); keep_track(); ?> /////////// الخرج 1 2 3 وهذا مثال للفرق بين قيمة متغير static وآخر ليس static: function a() { static $i = 0; $j = 0; return array($i++, $j++); } لاحظ أنه يحتفظ بقيمة i المعدلة ويعيد تعريف j print_r(a()); // array(0, 0) print_r(a()); // array(1, 0) print_r(a()); // array(2, 0) //... استخدام static في دالة function: function test() { static $a = 0; echo $a; $a++; } test(); // prints 0 test(); // prints 1 test(); // prints 2 اقتباس
0 Yomna Raouf نشر 13 فبراير 2021 أرسل تقرير نشر 13 فبراير 2021 في البرمجة كائنية التوجه، عندما نريد تعريف متغير عام داخل الصنف، يمكننا أن نصل له من أي مكاk يمكننا استخدام الكلمة المفتاحية public public $global_variable; لاحظ المثال التالي: <?php /** * الوراثة في PHP */ class Grandfather { // متغير عام public $global_variable; // الدالة البانية للصنف grandfather function __construct() { $this->global_variable = 56; echo "I am grandfather <br>"; } function default_function() { echo "this is default function in grandfather <br>"; } private function private_function() { echo "this is private function in grandfather <br>"; } protected function protected_function() { echo "this is protected function in grandfather <br>"; } public function public_function() { echo "this is public function in grandfather <br>"; } } /** * هذا صنف فرعي مشتق من الصنف Grandfather * وسيرث كل خاصياته عدا الخاصة (private) منها */ class Father extends Grandfather { // متغير عام public $father_var; function __construct() { // السطر الآتي مساوٌ للسطر => parent::__construct(); Grandfather::__construct(); $this->father_var = 256; echo "I am father <br>"; } public function display_all() { $this->default_function(); $this->protected_function(); $this->public_function(); echo "I am father's display_all <br>"; parent::public_function(); } } /** * هذا الصنف الابن يرث من الصنف الأب * ويرث أيضًا (بشكلٍ غير مباشر) من الصنف الجد */ class Child extends Father { // الدالة البانية في الصنف الابن function __construct() { Grandfather::__construct(); echo "I am child <br>"; } // يُعدِّل الابن في دالة موجودة في الأب // تسمى هذه العملية «إعادة تعريف الدوال» function display_all() { echo "function from father<br>"; // استدعاء دالة من الصنف الأب parent::display_all(); echo "new added in child<br>"; } } $obj = new Father(); $obj->display_all(); echo "<br><br><br>Child object call<br><br>"; $obj2 = new Child(); $obj2->display_all(); ?> الناتج من هذه الأكواد: I am grandfather I am father this is default function in grandfather this is protected function in grandfather this is public function in grandfather I am father's display_all this is public function in grandfather Child object call I am grandfather I am child function from father this is default function in grandfather this is protected function in grandfather this is public function in grandfather I am father's display_all this is public function in grandfather new added in child حيث أنّ: ال Public access: يتيح لنا الوصول لل methods من أي مكان الProtected access: يتيح لنا الوصول لل methods من داخل ال class نفسه أو داخل ال class الذي يرث منه أي ال child class ال Private access: يتيح الوصول لل methods من داخل الصنف نفسه فقط و لا يتاح للأبناء الوصول له اقتباس
0 سمير عبود نشر 13 فبراير 2021 أرسل تقرير نشر 13 فبراير 2021 إذا كنت تريد وضع خاصية الإتصال بقاعدة البيانات في الصنف Teacher فطريقة فهمك للبرمجة الكائنية خاطئة، إسأل نفسك هل الأستاذ لديه خاصية إسمها إتصال بقاعدة بيانات لا فهذا غير منطقي، يُمكن أن يكون للأستاذ إسم و لقب يُمكن أن يكون له سنوات خبرة كم، راتبه هذه الأشياء المُتعلقة بالأستاذ يُمكن وضعها في الصنف الخاص به، أما ما تُحاول القيام به فهو غير منطقي، الصواب هو أن تقوم ببناء كلاس يتعلق بقاعدة البيانات و تضع الأشياء المُتعلقة بقاعدة البيانات فيه مثلا كلاس إسمه Database اقتباس
0 بلال زيادة نشر 14 فبراير 2021 أرسل تقرير نشر 14 فبراير 2021 يمكنك جلب أي متغير global داخل الكلاس بالطريقة التالية, هو أن تقوم بجعل المتغير global ومن ثم تقوم استدعائه عن طريق $GLOBALS , من خلال الأمثلة ستتضح لك الفكرة. يوجد لدينا ملف db.php <?php $appConfig = array( 'db' => array( 'host' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'database' ), ); ويوجد لدينا ملف index.php <?php require('db.php'); class Teacher { public function __construct() { global $appConfig; echo $appConfig['db']['username']; } } $p = new Teacher(); ?> فلو تلاحظ أننا قمنا بجلب بيانات من المصفوفة بعد أن قمنا بجعل المتغير لها عام و من ثم استدعينا index معين لنطبع نتيجته. اقتباس
السؤال
محمود موسى2
السلام عليكم
أنا جديد في البرمجة كائنية الوجه وواجهتني مشكلة جعل المتغير $conn متغير global داخل الكلاس
حينما أريد جعل المتغير global داخل function أقوم بكتابة الكود التالي
فعندما كتبته داخل class بدل من function واجهتني مشكلة ذات خطأ:
Parse error: syntax error, unexpected token "global", expecting "function" or "const" in C:\xampp\htdocs\private\teachers.php on line 10
فما الحل؟
الكود المستخدم
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.