PHP Sınıf vs Fonksiyonu kullanmak için zaman

5 Cevap php

Ampul bunun için gitmek için henüz ...

Ben gerçekten sadece fonksiyonlarını kullanarak üzerinde php bir sınıfını kullanarak avantaj açıklama anlamak kolay isterim.

İşte ben şimdi yaşıyorum ve bir sınıf daha verimli olup olmadığını merak ediyorum düşünce basit bir örnek:

Ben php inşa ettik mini bir takvim widget'ı söylüyorlar. Ben fonksiyonunu miniCal('arrayVars1', 'var2') çağrı düşünüyorum. Ama ben o sayfada iki kez yapabilir. Bunun yeni örneklerini oluşturmak, burada bir sınıf kullanarak daha az kaynak kullanıyor musunuz?

Şu anda ağaç bir tuğla duvar gibi hissediyorum çünkü ben, burada ne ağaç kadar havlayan edilmelidir ...

5 Cevap

Sınıflar nesneler olarak veri temsil için kullanılır. Eğer, bir kullanıcının veri gibi bir şey, ya da bir açık artırma teklifi temsil eden bir User nesnesi oluşturarak veya AuctionBid nesne daha kolay birlikte verileri tutmak için yapar ediyorsanız, kodunuzu etrafında geçmek ve okuyucularına daha kolay anlaşılır kılar. Bu sınıflar özelliklerini (veri sayılar, dizeleri, ya da diğer nesneler gibi alanlar) yöntemlerin yanı sıra (herhangi bir sınıf üzerinde çalışabilir fonksiyonlar) olurdu.

Sınıflar genellikle performans açısından herhangi bir fayda sunmuyoruz, ama onlar çok nadiren ya da herhangi bir olumsuz etkisi yoktur. Onların gerçek fayda kod net yapımında olduğunu.

Sana PHP5 Object-Oriented Programming guide okumak ve Wikipedia OOP entry öneririz.

PHP5 beri yapmak için ortak bir şey kütüphaneler olarak hareket sınıfları oluşturmak oldu. Bu size işlevsellik organize ve __ autoload () gibi sınıf özelliklerinden yararlanarak fayda verir;

Örneğin, veri şifreleme ve şifre çözme için iki işlevi var düşünün. Sen (Şifreleme diyelim) ve onlara statik işlevleri yapmak bir sınıfta onları sarın olabilir. Sonra (hayır başlatma (yani $ obj = new Şifreleme) tabi fark) bu gibi sonra çağırabilirsiniz:

$encrypted_text = Encryption::encrypt($string);

ve

$decrypted_text = Encryption::decrypt($string);

Bu faydaları şunlardır:

  1. Your encryption functionality is grouped together ve organized. You, ve anyone maintaining the code, know where to find your encryption functionality.
  2. This is very clear ve easy to read. Good for maintainability.
  3. Sizin için otomatik sınıfı dahil () __ autoload kullanabilirsiniz. Bu bir fonksiyon inşa edilmiş gibi kullanabileceğiniz anlamına gelir.
  4. Because it is contained in its own class ve own file it is reusable ve can easily be ported to new projects.

I have a list of places you would use OOP-Style Classes in my answer to this question: http://stackoverflow.com/questions/2035449/why-is-oop-hard-for-me/2035482#2035482

Temelde, bunu şeyler var bir nesneyi temsil etmek istediğinizde. Benzersiz içinde bir bağlantısı olan bir veritabanı değişken gibi. Yani bu yüzden mysql_query doğru bağlantı her şey kullandığından emin olun ki saklamak istiyorsunuz:

class MySQL extends Database
{
    public function connect($host, $user, $pass, $database)
    {        
        $this->connection = mysql_connect($host, $user, $pass);
        $this->select_db($database);
    }

    public function query($query)
    {
        return mysql_query($query, $this->connection);
    }

    public function select_db($database)
    {
        mysql_select_db($database);
    }    
}

Ya da belki girdiler ve bunu göstermek için karar ne zaman forma içinde olmak istiyorum böyle bir listesini içeren bir form nesnesi yapabilir, bir form inşa etmek istiyorum:

class Form
{
    protected $inputs = array();
    public function makeInput($type, $name)
    {
         echo '<input type="'.$type.'" name="'.$name.'">';
    }

    public function addInput($type, $name)
    {
         $this->inputs[] = array("type" => $type,
                "name" => $name);
    }

    public function run()
   {
       foreach($this->inputs as $array)
       { 
          $this->makeInput($array['type'], $array['name'];
       }
    }
}

$form = new form();

$this->addInput("text", "username");
$this->addInput("text", "password");

Ya da bir başkası olarak önerilen, bir kişi:

class Person{

    public $name;
    public $job_title;
    // ... etc....

}

Hepsi bir isim ya da bir iş başlığı gibi özelliklere sahip bir şey temsil olarak sınıfları oluşturmak için nedenleri vardır, ve böyle bir formu görüntüleme gibi yöntemler, olabilir.

İşlevleri uygulamanın et ve sınıfları daha fazla plaka gibidir. Bu olmadan bir tabak et yemek dağınık. Eğer herhangi bir et yoksa Ancak, bir yemek yok.

Eğer uygulamalarda 500 fonksiyonları varsa, muhtemelen erişim kolaylığı için büyük koleksiyonlar halinde bunların en az yarısı grubuna istediğiniz gidiyoruz. Sen ortak bir adlandırma kuralları ("Encryption_Encrypt", "Encycryption_Decrypt", vb) vasiyetle olabilir ... ama sınıfları sadece daha kolay. Eğer sadece uygulama 12 fonksiyonları varsa varsa, muhtemelen, sadece 1 veya sınıfları ile hayatta olabilir.

Ben sık sık sınıfları veri / özelliklerini saklamak gerekmez. I veritabanında bu saklamak eğilimindedir. Bu yüzden çok sık sınıfların bu yönü yararlanmak değil.

Sınıflar da yararlı olabilir, polimorfizm sağlar. Eğer son derece benzer çeşitli sınıflar, ya da bir sınıfın çeşitli varyasyonlar varsa, kod kaydedebilirsiniz ... bazı çok amaçlı, Frankenstein gibi sınıf oluşturmak zorunda kalmadan.

Birçok kez çağrılacak bir işlev gerekiyorsa sınıflarını kullanarak yararlıdır.