علي العبدالله نشر 5 نوفمبر 2023 أرسل تقرير نشر 5 نوفمبر 2023 انهيت مسار البرمجة الكائنية في دورة PHP وفهمت والآن اطبق بمفردي ماتعلمته ولكن يتراودني سؤال كيف اقوم بربط الدوال مثلا ً لدينا في لارافل User::find(1)->delete(); نلاحظ انه بالاول قمنا بإستدعاء دالة find ومررنا المعرف ومن ثم قمنا باستدعاء delete() كيف اقوم بذلك بـphp لدي كود مبدئي اطبق عليه حاليا: class Task extends DBConnection { public $id; public $description; public $completed; public static function find($id) { $pdo = parent::make(); $query = $pdo->prepare("SELECT * FROM tasks where id = $id"); $query->execute(); return $query->fetch(PDO::FETCH_OBJ) ? : "DATA NOT FOUND"; } } هنا يقوم بإرجاع البيانات كيف اقوم بإنشاء دالة مرتبطة بدالة find نفس مثال لارافل ؟ 1 اقتباس
0 علي العبدالله نشر 6 نوفمبر 2023 الكاتب أرسل تقرير نشر 6 نوفمبر 2023 بتاريخ 20 دقائق مضت قال Mustafa Suleiman: لربط الدوال معًا في PHP، عليك الإعتماد على المفهوم الأساسي لبرمجة الكائنات وهو التغليف (Encapsulation)، بحيث تقوم بإنشاء دوال إضافية في نفس الكائن واستدعاءها بعد استدعاء الدالة الأصلية، وأنت ترغب في إنشاء دالة تقوم بحذف السجل بناءً على النتيجة التي تم استرجاعها من الدالة find، مثلما تم في Laravel، وإليك مثال: class Task extends DBConnection { public $id; public $description; public $completed; public static function find($id) { $pdo = parent::make(); $query = $pdo->prepare("SELECT * FROM tasks where id = $id"); $query->execute(); return $query->fetch(PDO::FETCH_OBJ) ?: "DATA NOT FOUND"; } public function delete() { if ($this->id) { $pdo = parent::make(); $query = $pdo->prepare("DELETE FROM tasks where id = ?"); $query->execute([$this->id]); return "Record deleted successfully"; } else { return "Cannot delete - no valid ID"; } } } الآن، بعد استدعاء find للعثور على السجل المطلوب، نقوم باستدعاء delete مباشرة على الكائن Task: $task = Task::find(1); if ($task !== "DATA NOT FOUND") { $result = $task->delete(); echo $result; } else { echo "Record not found."; } من أجل البحث عن السجل الذي تريد حذفه باستخدام الدالة find ثم سيقوم بحذفه باستخدام الدالة delete المرتبطة بالكائن Task. لايعمل والسبب ان تعرف على البيانات بنوع StdClass Fatal error: Uncaught Error: Call to undefined method stdClass::delete() ... $data= $query->fetch(PDO::FETCH_CLASS, "Task"); وهذا لايعمل اذا كان fetch قمت بتجربة طريقة اخرى ونجح الامر class Task extends DBConnection { public $id; public $description; public $completed; public $table = self::class."s"; public static function find($id) { $pdo = parent::make(); $query = $pdo->prepare("SELECT * FROM tasks where id = $id"); $query->execute(); $data= $query->fetch(PDO::FETCH_OBJ); if($data) { $task =new Task; $task->id = $data->id; $task->description = $data->description; $task->completed = $data->completed; return $task; } else { return null; } } public function delete() { $pdo = parent::make(); $query = "delete from $this->table where id = $this->id"; $query = $pdo->prepare($query); $query->execute(); return "Record deleted successfully"; } } Task::find(1)->delete(); اقتباس
1 Mustafa Suleiman نشر 6 نوفمبر 2023 أرسل تقرير نشر 6 نوفمبر 2023 لربط الدوال معًا في PHP، عليك الإعتماد على المفهوم الأساسي لبرمجة الكائنات وهو التغليف (Encapsulation)، بحيث تقوم بإنشاء دوال إضافية في نفس الكائن واستدعاءها بعد استدعاء الدالة الأصلية، وأنت ترغب في إنشاء دالة تقوم بحذف السجل بناءً على النتيجة التي تم استرجاعها من الدالة find، مثلما تم في Laravel، وإليك مثال: class Task extends DBConnection { public $id; public $description; public $completed; public static function find($id) { $pdo = parent::make(); $query = $pdo->prepare("SELECT * FROM tasks where id = $id"); $query->execute(); return $query->fetch(PDO::FETCH_OBJ) ?: "DATA NOT FOUND"; } public function delete() { if ($this->id) { $pdo = parent::make(); $query = $pdo->prepare("DELETE FROM tasks where id = ?"); $query->execute([$this->id]); return "Record deleted successfully"; } else { return "Cannot delete - no valid ID"; } } } الآن، بعد استدعاء find للعثور على السجل المطلوب، نقوم باستدعاء delete مباشرة على الكائن Task: $task = Task::find(1); if ($task !== "DATA NOT FOUND") { $result = $task->delete(); echo $result; } else { echo "Record not found."; } من أجل البحث عن السجل الذي تريد حذفه باستخدام الدالة find ثم سيقوم بحذفه باستخدام الدالة delete المرتبطة بالكائن Task. 1 اقتباس
السؤال
علي العبدالله
انهيت مسار البرمجة الكائنية في دورة PHP وفهمت والآن اطبق بمفردي ماتعلمته
ولكن يتراودني سؤال
كيف اقوم بربط الدوال
مثلا ً لدينا في لارافل
نلاحظ انه بالاول قمنا بإستدعاء دالة find ومررنا المعرف ومن ثم قمنا باستدعاء delete()
كيف اقوم بذلك بـphp
لدي كود مبدئي اطبق عليه حاليا:
هنا يقوم بإرجاع البيانات
كيف اقوم بإنشاء دالة مرتبطة بدالة find نفس مثال لارافل ؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.