Parametry versus atributy (třída proměnné)?

hlasů
0

V OOP, je lepší použít atributy třída ve funkcích třídy, nebo jen předat parametry k nim.

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;
  }
}

VS

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
  }
}

Co je lepší způsob, jak jít?

Položena 27/08/2009 v 04:35
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
1

Mezi svými řešeními, První z nich je lepší, ale budete muset změnit názvy funkcí. ‚Dostat‘ by měl být používán pouze v případě funkce vrací něco.

Důvodem je lepší je, že nepoužívá vedlejší účinky, nežádoucí účinky, vždy špatné, protože jsou neviditelné pro uživatele chování třídy třídy, ale změnit. Takže byste se měli pokusit se minimalizovat nebo aby jim jasné, jak jsou v prvním případě, když není opravdu ‚strana‘.

Ale v tomto konkrétním případě, Get_Existing_Usera Add_Usermusí být statické funkce, které vracejí nový Userobjekt, to je někdy označován jako statický konstruktor. Důvodem, proč je to mnohem lepší, je to, že je jasné, co která funkce dělat, že něco jako parametr (user_id stávající uživatele nebo FIRST_NAME, last_name a dalších atributů pro nové uživatele) a vytvořit objekt, který představuje uživatele. Veškerou manipulaci databáze bude ukryt. Samotný objekt by měl mít vlastnosti, pro jména a dalších atributů a dokonce i metody Save (), aby se zasadila změny zpět. Ale hlavní myšlenkou je, že se vždy pracovat s postavený objekt, objekt, který již mají kontext a souvisí s něčím v reálném světě (to znamená, že uživatel v databázi), nikoli prázdnou skořápkou, která bude vyplněna as you go.

Odpovězeno 27/08/2009 v 05:14
zdroj uživatelem

hlasů
0

Je důležité, abyste si vybrat metodu, která nejlépe vyhovuje vaší situaci. Ignoruje, že ne tak užitečný návrh Povzbuzuji vás, abyste se dobře podívat na některých důležitých principů objektově orientovaného designu

  1. spojování
  2. Soudržnost

Silný pochopení těchto témat vám pomohou posoudit vaši situaci a kód tak, aby vyhovovaly cílů projektu. Jak váš projekt roste, budete pravděpodobně zjistíte, že budete chtít používat metody, které mají volitelných parametrů k interakci se svými objekty, aby se dosáhlo vysoké soudržnosti a volné vazby. Pak budete používat metody a parametry, jako odborník.

Odpovězeno 27/08/2009 v 20:40
zdroj uživatelem

hlasů
0

Některé vyjasnění pojmů jako první:

Co říkáte třídy funkce jsou více vhodně volal metody . Metoda je funkce na instanci objektu. Navíc třídy mohou mít metody. Jedná se o tzv metody třídy nebo statické metody . Použijete-li termín funkci třídy , ty jsou tak matoucí smysl.

Který se usadil, není horší nebo lepší z těchto dvou přístupů. Byste používat obojí, v závislosti na kontextu. Parametry mají menší rozsah, a tak způsobují menší spojky. Je-li vše ostatní je stejné, tak bych tedy říci, že parametry jsou vhodnější nastavení vlastnost objektu.

To znamená, že tam jsou obvykle i jiné faktory, které mohou určit, které si vybrat. Můžete si myslet objektu jako prostor pro proměnných s tím souvisejících. Je-li proměnná patří do této působnosti, by mělo smysl ji přiřadit k nemovitosti.

Odpovězeno 27/08/2009 v 08:59
zdroj uživatelem

hlasů
0

Že zcela závisí na wether budete data znovu použít a jak budete používat třídu.

Pokud si vytvořit mnoho jednotlivé instance třídy a každý objekt představuje jedinečný uživatele, to dává smysl, aby přetrvávat data v proměnné členů. Pokud používáte třídy jako DAO (objekt přístupu k údajům) se s mnoha jednorázových operací, to asi nedělá hodně smysl přetrvávat data. Ale i v DAO, v závislosti na jeho vnitřní fungování, to by mohlo mít smysl pro ukládání dat alespoň dočasně v členské proměnné, pokud existuje mnoho funkcí zapojených do jednoho hovoru (podobně beforeQuerya afterQueryzpětná volání nebo podobně).

Neexistuje jeden lépe cesta-fits-it-all.

Odpovězeno 27/08/2009 v 05:01
zdroj uživatelem

hlasů
0

atributy třídy se očekává, že k popisu stavu z instance třídy známé jako objekt. Jako takové atributy lze použít jakoukoliv funkci třídy modifikovat to stát. Parametry funkce na druhé straně může mít nic společného s aktuálním stavem objektu, ale mohou být použity k úpravě je to stát.

Například: Objekt uživatele lze očekávat, že má atribut uživatelské jméno, atribut heslo a ověřené atribut. Tento objekt uživatele má také funkci nazvanou ověřeni, která přebírá parametr, který popisuje metody ověřování. Tento parametr se používá k úpravě stavu objektu uživatele, ale nebude konat jako atribut něj.

Odpovězeno 27/08/2009 v 05:00
zdroj uživatelem

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