كيف يمكنك إنشاء مصنع يمتد ديناميكيا فئة، لذلك يتغير نوعه ولكنه يرث الأساليب الأصلية؟

StackOverflow https://stackoverflow.com/questions/2203538

سؤال

ما أود القيام به هو الحصول على وظيفة مصنع ثابت يمكنك تقديم سلسلة من السمات وعدم إرجاع كائن من فئة غير معلنة مسبقا تمديد فئة معروفة.

في الأساس:

<?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 للحصول على بعض الأفكار أيضا.

قال ذلك ما لم تكن فعلا إضافة / طرق زائدة، لماذا تريد أن تفعل هذا؟ لماذا لا تستخدم خاصية فقط في الكائن أو استخدم واجهة؟ ما هو الهدف هنا؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top