Les paramètres par rapport aux attributs (variables de classe)?

voix
0

En POO, est-il préférable d'utiliser attributs de classe dans les fonctions de classe, ou tout simplement passer des paramètres à eux.

class User{
  private $user = array();

  public function Get_Existing_User($user_id){
    //SQL selects user info for existing user
    $this->user = mysqli_fetch_assoc();
  }

  public function Set_User($user_data){
    $this->user = (array) $user_data;
  }

  public function Add_User(){
    //insert everything from $this->user into database
  }

  public function Get_User(){
    return $this->user;
  }
}

CONTRE

class User{

  public function Get_Existing_User($user_id){
    //SQL selects user info for existing user
    $user = mysqli_fetch_assoc();
    return $user;
  }

  public function Add_User($user_data){
    //insert everything from $user_data into database
  }
}

Quelle est la meilleure façon d'aller?

Créé 27/08/2009 à 04:35
source utilisateur
Dans d'autres langues...                            


5 réponses

voix
1

Entre vos solutions, d'abord est mieux, mais vous devez changer les noms des fonctions. « Get » devrait être utilisé que si la fonction retourne quelque chose.

La raison pour laquelle il vaut mieux est qu'il n'utilise pas d'effets secondaires, les effets secondaires toujours mauvais car ils sont invisibles à l'utilisateur du comportement de classe de classe, mais le changement. Donc, vous devriez essayer de les minimiser ou de les rendre évidentes qu'elles sont dans le premier cas, quand ils pas vraiment « côté ».

Mais dans ce cas particulier, Get_Existing_Useret Add_Userdevrait être des fonctions statiques, qui renvoient nouvel Userobjet, il est parfois appelé constructeur statique. La raison pour laquelle il est beaucoup mieux est qu'il fait clairement ce qui fonctionne le font, ils obtiennent quelque chose en tant que paramètre (user_id d'utilisateur existant ou prenom, last_name et d' autres attributs pour un nouvel utilisateur) et de créer un objet qui représente l'utilisateur. Toutes les manipulations de base de données sera caché. Objet lui - même doit avoir des propriétés pour le nom et d' autres attributs et même méthode Save () pour pousser les modifications dans . Mais l' idée principale est que vous travaillez toujours avec un objet construit, objet qui ont déjà contexte et lié à quelque chose dans le monde réel (qui est, utilisateur dans la base de données), pas une coquille vide qui sera rempli comme vous allez.

Créé 27/08/2009 à 05:14
source utilisateur

voix
0

Il est important que vous choisissez la méthode qui convient le mieux à votre situation. Ignorant cette suggestion pas si utile Je vous encourage à prendre un bon regard sur quelques principes importants dans la conception orientée objet

  1. Couplage
  2. Cohésion

Une bonne compréhension de ces sujets vous aidera à évaluer votre situation et le code en fonction des objectifs du projet. À mesure que votre projet se développe, vous trouverez probablement que vous aurez envie d'utiliser des méthodes qui ont des paramètres optionnels pour interagir avec vos objets pour obtenir une grande cohésion et couplage lâche. Ensuite, vous utilisez des méthodes et des paramètres comme un expert.

Créé 27/08/2009 à 20:40
source utilisateur

voix
0

Quelques précisions sur la terminologie première:

Ce que vous appelez des fonctions de classe sont plus proprement dites méthodes . Une méthode est une fonction sur une instance d'objet. De plus, les classes peuvent avoir des méthodes. Elles sont appelées méthodes de classe ou méthodes statiques . Lorsque vous utilisez le terme fonction de la classe , vous confondez donc le sens.

Cela posé, il n'y a pas pire ou mieux des deux approches. Vous utiliserez les deux, en fonction du contexte. Les paramètres ont une portée plus limitée, et donc causent moins de couplage. Si tout le reste est le même, je dirais donc que les paramètres sont préférables à la mise en propriété d' un objet.

Cela dit, il y a généralement d'autres facteurs qui peuvent déterminer les choisir. Vous pouvez penser à un objet en tant que cadre pour les variables connexes. Si une variable appartient à cette portée, il serait logique d'attribuer à une propriété.

Créé 27/08/2009 à 08:59
source utilisateur

voix
0

Ce tout dépend de vous wether allez réutiliser les données et comment vous utilisez la classe.

Si vous créez de nombreux cas individuels de la classe et chaque objet représente un utilisateur unique, il est logique de persister les données dans une variable membre. Si vous utilisez la classe comme DAO (objets d'accès aux données) avec un grand nombre d'opérations ponctuelles, il n'a probablement pas beaucoup de sens pour conserver les données. Mais même dans un OAC, en fonction de son fonctionnement interne, il peut être judicieux de stocker les données au moins temporairement dans une variable membre s'il y a beaucoup de fonctions impliquées dans un seul appel (comme beforeQueryet afterQuerycallbacks ou similaires).

Il n'y a pas une meilleure façon unique-it-all.

Créé 27/08/2009 à 05:01
source utilisateur

voix
0

Les attributs de classe sont censés décrire l'état d'une instance de la classe connue sous le nom d'un objet. En tant que tel, les attributs peuvent être utilisés par une fonction de la classe à modifier son état. Paramètres de fonction d'autre part peut avoir rien à voir avec l'état actuel de l'objet, mais peut être utilisé pour modifier son état.

Par exemple: un objet utilisateur pourrait être prévu d'avoir un attribut de nom d'utilisateur, un attribut de mot de passe et un attribut authentifié. cet objet utilisateur dispose également d'une fonction appelée authenticate qui prend un paramètre qui décrit un procédé d'authentification. Le paramètre est utilisé pour modifier l'état de l'objet utilisateur, mais ne serait pas tenu comme un attribut de celui-ci.

Créé 27/08/2009 à 05:00
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more