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

استفسارات عن بعض التفاصيل في PHP OOP

علي العبدالله

السؤال

انهيت مسار البرمجة الكائنية في دورة 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 نفس مثال لارافل ؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0
بتاريخ 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

لربط الدوال معًا في 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.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...