通过php中的私有函数覆盖公共函数

时间:2015-10-08 21:34:47

标签: php eloquent visibility

我使用laravel作为框架,我喜欢Eloquent对象。但是现在我有一个Eloquent对象,只允许在特定函数中创建。在正常情况下,我会将构造函数和静态create方法设为私有,并从此类中的静态函数中调用它们。

我的班级看起来像这样:

#outer

在一个完美的世界中。我希望看起来如下:

class Action extends Model {

    public static function create(array $attributes = []) {
        parent::create($attributes);
    }

    private static function customCreate(ActionType $action, Country $from, Country $to){
        self::create([
            'action' => $action,
            'country_from_id' => $from->id,
            'country_to_id' => $to->id,
        ]);
    }

    public static function attack(Country $from, Country $to) {
        if($from->hasNeighbour($to)){
            return new self(ActionType::attack(), $from, $to);
        }
        throw new InvalidActionException('Only neighbours can attack each other');
    }
}

但这个完美的世界'由于2次失败,php不允许使用解决方案。第一个是我无法通过私有方法覆盖公共方法。第二个失败是create方法与eloquent create方法不兼容(eloquent方法需要参数class Action extends Model { private static function create(ActionType $action, Country $from, Country $to){ parent::create([ 'action' => $action, 'country_from_id' => $from->id, 'country_to_id' => $to->id, ]); } public static function attack(Country $from, Country $to) { if($from->hasNeighbour($to)){ return new self(ActionType::attack(), $from, $to); } throw new InvalidActionException('Only neighbours can attack each other'); } } )...

实现像我这完美世界这样美丽事物的最佳解决方案是什么?溶液

0 个答案:

没有答案