2010-03-28 4 views
2

Lorsque j'ai appris PHP, c'était à peu près sous forme procédurale, plus récemment, j'ai essayé de m'adapter à la méthode OOP. Cependant, les tutoriels que j'ai suivis ont été produits avant PHP 5.3 quand la liaison statique tardive a été introduite.Syntaxe PHP pour référencer soi-même avec une liaison statique tardive

Ce que je veux savoir est comment puis-je référence self lors de l'appel d'une fonction d'une classe parente.

Par exemple, ces deux méthodes ont été écrites pour une classe User qui est un enfant de DatabaseObject. En ce moment, ils sont assis dans la classe User, mais comme ils sont utilisés dans d'autres classes enfants de DatabaseObject, j'aimerais les promouvoir pour qu'ils soient inclus dans DatabaseObject.

public static function find_all() 
    { 
    global $database; 
    $result_set = self::find_by_sql("select * from ".self::$table_name); 
    return $result_set; 
    } 

et:

protected function cleaned_attributes() 
    { 
    global $database; 
    $clean_attributes = array(); 
    foreach($this->attributes() as $key => $value) 
     { 
     $clean_attributes[$key] = $database->escape_value($value); 
     } 
    return $clean_attributes; 
    } 

J'ai donc trois questions:

1) Comment puis-je changer la référence self:: quand je me déplace au parent. Est-ce static:: ou quelque chose de similaire?
2) Lorsque j'appelle la fonction de mon code, est-ce que je l'appelle de la même manière, en fonction de la classe enfant, par exemple User::find_all() ou y a-t-il également un changement?
3) Y at-il autre chose que je dois savoir avant de commencer à hacher les bits?

+1

* (référence) * http://de3.php.net/manual/en/language.oop5 .late-static-bindings.php – Gordon

Répondre

0

1) Comment modifier la référence self :: lorsque je la déplace vers le parent. Est-ce statique :: ou quelque chose de similaire?

il est static

2) Lorsque vous appelez la fonction de mon code que je l'appelle de la même manière, en fonction de la classe de l'enfant par exemple utilisateur :: find_all() ou est-il changer là aussi?

il est User::find_all

3) Y at-il autre chose que je dois savoir avant de commencer les bits hacher?

oui. La statistique est et non "la façon OOP de faire les choses". La POO concerne les objets, pas les classes. Les méthodes statiques sont en fait des procédures avec une syntaxe sophistiquée et sont aussi mauvaises que celles-ci.

+0

Je ne me rappelle pas avoir dit que la statique était la façon de faire de la POO, je parlais des principes dans leur ensemble. La statistique était l'une des questions sur lesquelles j'avais une question, j'essayais simplement d'ajouter un peu de contexte. Merci pour la réponse si. – TooManyCooks

+0

Aussi juste pour clarifier, je laisse tomber des parenthèses pour des appels de fonction? Je pensais y compris le standard() pour n'importe quelle fonction indépendamment du fait que les arguments ont été passés? – TooManyCooks

+0

pas de copain de problème // – user187291

Questions connexes