Avatar ·

ما الفرق بين new self و new static في PHP؟ الربط الثابت المتأخر

مرحباً بالجميع! اليوم الثالث وأنا أعاني من غرابة في PHP. لدي كلاس أساسي يقوم بإنشاء نسخه الخاصة عبر method ثابتة. عندما أرث هذا الكلاس، أتوقع أن يقوم الكلاس الابن بإنشاء كائنات من نوعه، ولكن لسبب ما يتم إنشاء كائن من الكلاس الأب. إليك مثال مبسط: ```php class ParentClass { public static function create() { return new self(); } } class ChildClass extends ParentClass { // لا يوجد إعادة تعريف } $obj = ChildClass::create(); // $obj هو ParentClass وليس ChildClass! echo get_class($obj); // ParentClass ``` لقد قرأت عن الربط الثابت المتأخر (Late Static Binding) وعن الكلمة المفتاحية `static`، لكني لم أفهم تماماً كيف يعمل هذا. لماذا يشير `new self()` دائماً إلى الكلاس الذي كُتبت فيه هذه الشيفرة، وليس إلى الكلاس الذي تم استدعاء الـ method منه؟ وكيف يمكنني جعل `ChildClass::create()` يُرجع كائن من نوع `ChildClass` وليس `ParentClass`؟ اشرح