Question

LI amise une couche de modèle léger pour l'accès à la base de données de mon projet. J'aimerais que ce soit dans l'esprit de Ruby sur des rails.Au lieu d'instantifier un nouveau modèle Objet, je veux utiliser une approche singleton.Voici le problème actuel que je suis confronté:

class BaseModel {
    public static $name;
    public static function get($id) {
        echo "SELECT * FROM ". self::$name ."s WHERE ". self::$name .' = '.$id;
    }
}

class Customer extends BaseModel {
    //parent::$name = 'customer'; => ERROR
}

$c = Customer::get(4);

Y a-t-il un moyen d'affecter les membres statiques des parents dans le corps de la classe?J'aimerais Pour éviter de créer une classe singleton réelle si possible.Merci.

Était-ce utile?

La solution

La fonctionnalité que vous recherchez est appelée la fixation statique tardive (LSB) et heureusement été introduite à PHP en 5.3.Vous pouvez en lire ici: http://php.net/Manuel / EN / LANGUE.OOP5.LATE-STATIC-BINDINGS.PHP

Ceci est votre code réécrit avec LSB.

<?php

class BaseModel {
    public static $name;
    public static function get($id) {
        echo "SELECT * FROM ". static::$name ."s WHERE ". static::$name .' = '.$id;
    }
}

class Customer extends BaseModel {
    public static $name = 'customer';
}

$c = Customer::get(4);
?>

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top