كيف يمكنك إنشاء مصنع يمتد ديناميكيا فئة، لذلك يتغير نوعه ولكنه يرث الأساليب الأصلية؟
-
18-09-2019 - |
سؤال
ما أود القيام به هو الحصول على وظيفة مصنع ثابت يمكنك تقديم سلسلة من السمات وعدم إرجاع كائن من فئة غير معلنة مسبقا تمديد فئة معروفة.
في الأساس:
<?php
class foo {
public $a;
function increment($b = 1){
$this->a += $b;
}
}
function factory($name, $a){
//returns an object of class $name that extends foo with $this->a set to $a
}
لذلك إذا كتبت الرمز:
<?php
$bar = factory("bar",12);
$bar->increment(5);
print_r($bar);
if(is_a($bar, "foo")){
echo "is a Foo";
}
$moo = factory("moo", 4);
$moo->increment();
print_r($moo);
if(is_a($moo, "foo")){
echo "is a Foo";
}
انا حصلت: تعديل
bar Object
(
[a] => 17
)
is a Foo
moo Object
(
[a] => 5
)
is a Foo
لكنني لا أعرف من أين البدء في البحث عن الأوامر اللازمة للقيام بذلك. أعتقد أنه في وظيفة المصنع التي أحتاج إليها، أتعرض بطريقة أو بأخرى أن قيمة اسم $ يمتد فئة الوالدين ولكن لا يقوم بإجراء تغييرات عليه، ثم تقوم بإنشاء اسم جديد. بهذه الطريقة لديها كل وظيفة الطبقة الأصل، فقط نوع مختلف.
المحلول
تحقق من انعكاس PHP API لديه الطرق التي تحتاجها لاستخراجها وبناء الفئة الجديدة هناك ولكن، وكيفية الذهاب عن القيام بذلك ثم إنشاء مثيل منه غير متأكد من. أعرف أنه ممكن لأنني متأكد من أن هذا هو كيفية عمل السخرية في phpunit. قد ترغب أيضا في إلقاء نظرة على الفئات ذات الصلة كائن وهمية المختلفة في Phpunit للحصول على بعض الأفكار أيضا.
قال ذلك ما لم تكن فعلا إضافة / طرق زائدة، لماذا تريد أن تفعل هذا؟ لماذا لا تستخدم خاصية فقط في الكائن أو استخدم واجهة؟ ما هو الهدف هنا؟