Nitelikler (sınıf değişkenleri) vs Parametreleri?

5 Cevap php

OOP, bu sınıf sınıf fonksiyonları içinde niteliklerini, ya da sadece onlara parametreleri geçirmek kullanmak daha iyidir.

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

Iyi bir yol nedir gitmek için?

5 Cevap

İlk terminoloji üzerine bazı açıklama:

Eğer dediğimiz class functions daha düzgün denir methods. Yöntem, bir nesne örneği üzerinde bir işlevdir. Ayrıca, classes yöntemleri olabilir. Bu class methods ya da static methods denir. Eğer terim class function kullandığınızda, böylece anlam kafa karıştırıcıdır.

Yani yerleşmiş, iki yaklaşımın hiçbir kötü ya da daha iyi. Sen bağlamında bağlı olarak, hem kullanabilirsiniz. Parametreler bir kapsama sahip daha küçük, ve bu nedenle daha az bağlamaya neden olurlar. If everything else is the same, I would therefore say that parameters are preferable to setting an object property.

O dedi, hangi almak için belirleyebilirsiniz diğer faktörler genellikle vardır. Siz ilgili değişkenler için bir kapsam olarak bir nesnenin düşünebilirsiniz. Bir değişken o kapsamda aitse, özellik atamak için mantıklı olur.

Lütfen çözümleri arasında, ilk iyidir, ancak fonksiyonların isimlerini değiştirmek zorunda. Fonksiyon şey döndürür yalnızca kullanılmalıdır 'olsun'.

Daha iyi olmasının nedeni onlar sınıf ama değişim sınıf davranış kullanıcı için görünmez olarak yan etkiler her zaman kötü, yan etkileri kullanmak olmamasıdır. Yani bunları en aza indirmek için deneyin ya da ilk durumda olduğu gibi zaman gerçekten 'yan', onlara açık yapmalıdır.

Ancak, bu özel durumda, Get_Existing_User ve Add_User Yeni User nesnesi geri statik fonksiyonları olmalıdır, bazen statik yapıcısı olarak adlandırılır. Çok daha iyi neden nedeni açıkça ne olduğunu sağlamasıdır işlevler parametresi (yeni bir kullanıcı için mevcut kullanıcı veya FIRST_NAME, last_name ve diğer nitelikleri USER_ID) gibi bir şey almak ve kullanıcıyı temsil eden bir nesne oluşturmak, yapmak. Tüm veritabanı manipülasyon gizlenmiş olacaktır. Kendisi geri değişiklikleri itmek için isim ve diğer nitelikleri özelliklerini ve hatta Kaydet () yöntem olmalıdır nesne. Ama ana fikir her zaman zaten bağlam var ve gerçek dünyada bir şey (yani veritabanı, kullanıcı) değil, siz gidin dolacak boş bir kabuk bağlantılı inşa nesne, nesne ile çalışacak olması.

Sınıf özellikleri bir nesne olarak bilinen sınıfının bir örneğinin durumunu açıklamak bekleniyor. Gibi nitelikler durumunu değiştirmek için herhangi bir sınıfın fonksiyonu tarafından kullanılabilir. Öte yandan Fonksiyon parametreleri nesne mevcut durumu ile ilgisi olabilir ama devlet bu değiştirmek için de kullanılabilir.

Örneğin: Bir kullanıcı nesnesi bir kullanıcı adı özniteliği, bir şifre niteliği ve kimliği doğrulanmış bir nitelik olması beklenebilir. Bu kullanıcı nesnesi aynı zamanda bir kimlik doğrulama yöntemi açıklayan bir parametre alır kimlik doğrulaması adında bir işlevi vardır. Parametresi kullanıcı nesnenin durumunu değiştirmek için kullanılır ama bunun bir niteliği olarak düzenlenecek olmaz.

Yeniden kullanmak veri gidiyoruz ve nasıl Class kullanıyorsanız wether bu tamamen bağlıdır.

Eğer Sınıf birçok bireysel örneklerini oluşturmak ve her nesne benzersiz bir kullanıcıyı temsil ediyorsa, bu bir üye değişkeni veri devam etmek mantıklı. Eğer bir kerelik operasyonları bir sürü ile bir DAO (Data Access Object) olarak Sınıfı'nı kullanarak yapıyorsanız, muhtemelen anlamda bir çok veriyi kalıcı yapmaz. Ama bir DAO, kendi iç işleyişini bağlı olarak, (([{{[) (0]} gibi ve tek bir çağrı dahil birçok işlevi varsa bir üye değişkeni en azından geçici verileri saklamak için mantıklı olabilir 1)]} geri aramalar ve benzerleri).

Hiç kimse-iyi-way-uyan-it-all var.

Bu en iyi duruma uygun yöntemi seçmek önemlidir. -So-yararlı değil öneri Seni Object Oriented Design bazı önemli ilkeler iyi bir bakmak için teşvik almamak

  1. Coupling
  2. Cohesion

Bu konularda güçlü bir anlayış projenin hedeflerine uygun durumunuzu ve kod değerlendirmek yardımcı olacaktır. Proje büyüdükçe, büyük olasılıkla yüksek uyum ve gevşek bağlantı elde etmek için nesnelerle etkileşim için isteğe bağlı parametreleri var yöntemlerini kullanmak isteyeceksiniz olduğunu göreceksiniz. Sonra bir uzman gibi yöntemler ve parametreleri kullanacağız.