Bir sınıf kendini uzatın veya Override miyim?

1 Cevap

Biz bir sınıf olduğunu varsayalım. Biz sınıftan bir nesne oluşturmak ve biz ne zaman sınıf nesnesi başlatma değeri kendisini tabanını genişletir ..

Örneğin:

$objectType1 = new Types(1);
$objectType1->Activate(); // It calls an activation function for type 1

$objectType2 = new Types(2);
$objectType2->Activate(); // It calls an activation function for type 2

Ben sınıf uzanan standart prosedür kullanmak istemiyorum:

class type1 extends types{}

1 Cevap

Sen zamanında bir sınıf genişletmek olamaz. Farklı iki türüne bir örnek değişkeni kullanın veya bir factory kullanın.

Örnek değişkeni için örnek:

class Types() {
    private $type;

    public function __construct($type) {
        $this->type = $type;
    }

    public function activate() {
        if($this->$type == 1) {
             // do this
        }
        else if($this->type == 2) {
             // do that
        }
   }
}

Fabrika desen için örnek:

abstract class BaseClass {
    // Force Extending class to define this method
    abstract public function activate();

    // Common method
    public function printOut() {
        echo "Hello World";
    }
}

class Type1 extends BaseClass {

    public function activate() {
       // do something
    }
}

class Type2 extends BaseClass {

    public function activate() {
        // do something else
    }
}

class TypeFactory {

    public static function getType($tpye) {
        if($type == 1) {
            return new Type1();
        }
        else if($type == 2) {
            return new Type2();
        }
    }
}

o zaman yapın:

$obj = TypeFactory::getType($1);
$obj->activate();

Update:

PHP 5.3 'ten beri kullanabilirsiniz anonymous functions. Belki bu yararlanabilirler.