Est-il possible de définir résumé des propriétés de la classe en PHP?
abstract class Foo_Abstract {
abstract public $tablename;
}
class Foo extends Foo_Abstract {
//Foo must 'implement' $property
public $tablename = 'users';
}
Est-il possible de définir résumé des propriétés de la classe en PHP?
abstract class Foo_Abstract {
abstract public $tablename;
}
class Foo extends Foo_Abstract {
//Foo must 'implement' $property
public $tablename = 'users';
}
Il n'y a pas une telle chose comme la définition d'une propriété.
Vous ne pouvez déclarer des biens parce qu'ils sont des conteneurs de données réservée en mémoire lors de l'initialisation.
Une fonction sur l'autre main peut être déclaré (type, nom, paramètres) sans être défini (corps de la fonction manquante) et, ainsi, peuvent être abstraites.
"Abstraite" indique seulement que quelque chose a été déclaré mais non défini et, par conséquent, avant de l'utiliser, vous devez définir, il ou elle devient inutile.
Non, il n'y a aucun moyen de faire appliquer qu'avec le compilateur, vous auriez à utiliser au moment de l'exécution des contrôles (par exemple, dans le constructeur) pour l' $tablename
variable, par exemple:
class Foo_Abstract {
public final function __construct(/*whatever*/) {
if(!isset($this->tablename))
throw new LogicException(get_class($this) . ' must have a $tablename');
}
}
Pour appliquer ce pour toutes les classes dérivées de Foo_Abstract que vous auriez à faire Foo_Abstract du constructeur final
, la prévention primordiale.
Vous pouvez déclarer un résumé de lecture à la place:
abstract class Foo_Abstract {
abstract public function get_tablename();
}
class Foo extends Foo_Abstract {
protected $tablename = 'tablename';
public function get_tablename() {
return $this->tablename;
}
}
Selon le contexte de la propriété, si je veux de la force de la déclaration d'un objet abstrait dans la propriété d'un objet enfant, j'aime utiliser une constante avec l' static
- clé pour la propriété dans l'abstrait constructeur de l'objet ou de méthodes setter/getter.
Autre que celle de l'enfant objet remplace le parent de l'objet de la propriété et des méthodes si redéfini. Par exemple, si une propriété est définie comme privé dans le parent et redéfini comme publics dans l'enfant, la propriété est publique.
http://www.php.net//manual/en/language.oop5.static.php
abstract class AbstractFoo
{
public $bar;
public function __construct()
{
$this->bar = static::BAR;
}
}
class Foo extends AbstractFoo
{
//const BAR = 'foobar';
}
$foo = new Foo; //Fatal Error: Undefined class constant 'BAR' (uncomment const BAR = 'foobar';)
echo $foo->bar;
comme indiqué ci-dessus, il n'existe pas de définition exacte. j'ai, cependant, utiliser cette solution de contournement simple pour forcer l'enfant de la classe pour définir le "résumé" de la propriété:
abstract class Father {
public $name;
abstract private function setName(); //now every child class must declare this function and thus declare the property
public function __construct(){
$this->setName();
}
}
class Son extends Father{
private function setName(){
$this->name="son";
}
function __construct(){
parent::__construct();
}
}
Comme vous avez pu l'avoir trouvé par le test de votre code:
Erreur fatale: les Propriétés ne peuvent pas être déclarée abstract ... sur la ligne 3
Non, il n'est pas. Les propriétés ne peuvent pas être déclarée abstract en PHP.
Cependant, vous pouvez mettre en œuvre un getter/setter abstrait, ce pourrait être ce que vous cherchez.
Les propriétés ne sont pas mises en œuvre (en particulier les propriétés publiques), ils existent (ou pas):
$foo = new Foo;
$foo->publicProperty = 'Bar';
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.