PHP - Aşırı yorumlama?

8 Cevap php

Geçenlerde küçük bir CMS üzerinde çalışmaya başladı. Ben genellikle. C # NET uygulamaları geliştirmek, ve ben çok benim alanları ve yöntemleri yorumlama alışkınım. Arkadaşım PHP dinamik ve istendiğinde çözümlü beri PHP açıklamaları olan yani yorumları ayrıştırmak zorunda uzun sürer, oldukça kötü olduğunu earler söyledi.

Bu ifade her yöntemi ve alan yorum olduğunu benim durum için geçerli mi?

Benim sınıfları birinin örneği:

<?php
/* 
 *     jWeb
 *     Copyright (C) 2010 AJ Ravindiran
 * 
 *     This program is free software: you can redistribute it and/or modify
 *     it under the terms of the GNU General Public License as published by
 *     the Free Software Foundation, either version 3 of the License, or
 *     (at your option) any later version.
 * 
 *     This program is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *     GNU General Public License for more details.
 * 
 *     You should have received a copy of the GNU General Public License
 *     along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

/**
 * Controls database connections.
 *
 * @author AJ Ravindiran
 * @version 1.0.0 Jan-02-2010
 */
class database {
    /**
     * The database connection ip address.
     * @var string
     */
    private $host = "";

    /**
     * The database user's name.
     * @var string
     */
    private $username = "";
    /**
     * The database user's password.
     * @var string
     */
    private $password = "";

    /**
     * The database that this instance will write to, and read from.
     * @var string
     */
    private $database = "";

    /**
     * Holds the mysql connection instance.
     * @var resource
     */
    private $connection = null;

    /**
     * Whether the instance is connected to the specified database.
     * @var bool
     */
    private $connected = false;

    /**
     * Constructs a new database instance.
     * @param string $host The database server host.
     * @param string $port The database server port.
     * @param string $username The database's username authentication.
     * @param string $password The username's specified password.
     */
    public function __construct($host = "localhost", $username = "root", $password = "") {
        $this->host = $host;
        $this->username = $username;
        $this->password = $password;
    }

    /**
     * Connects to the given database.
     * @param string $database
     */
    public function connect($database) {
        $this->database = $database;

        // TODO: handle errors.
        $this->connection = @mysql_connect($this->host, $this->username, $this->password) or die();
        @mysql_select_db($this->database, $this->connection) or die();

        /*
         * If the connection was successful, we can now
         * identify that the connection is sustained.
         */
        if ($this->connect != null) {
            $this->connected = true;
        }
    }

    /**
     * Gets the specified connection details from this instance.
     * @param boolean $show_details
     * @return string The connection string.
     */
    public function getConnectionString($show_details = false) {
        if ($show_details) {
            return "database[host=" . $this->host 
                    . ", port=" . $this->port
                    . ", user=" . $this->username
                    . ", pass=" . $this->password
                    . ", database=" . $this->database . "]";
        } else {
            return "database[host=" . $this->host
                    . ", port=" . $this->port . "]";
        }
    }
}
?>

8 Cevap

Sen yorumlama ve yorumlama var. Özellikle başlayanlar bir "insan okunabilir dili" kod her satırı çevirmek ister.

// Assign "a" to x.
$x = "a";

// Do stuff with x and get y.
$y = do_stuff($x);

// Return y.
return $y;

experts (bit) more experienced programmers genellikle sadece bunu yaparken:

// Do stuff with "a" and return it.
$x = "a";
$y = do_stuff($x);
return $y;

ya da

// Do stuff with "a" and return it.
return do_stuff("a");

Ilk "aşırı yorumlama" örneği olduğunu söylemeye gerek yok. Yorum bu tür Ancak aynı zamanda mükemmel bir işlev-yorum olarak yerleştirilebilir. Sadece, kendi kendini açıklayan kod yazmak mesela $x gibi değişkenleri kullanmak, ancak o $speed ya da öylesine ve fonksiyonları bir verb ad vermek, gibi, bir noun isim vermeyin increment_speed() ya da öylesine. Bu şekilde sadece zaten kodunun kendisi tarafından açıklanmıştır uzak işlev içinde tüm yorum bırakabilirsiniz.

"Over-yorumlama" Ancak etmez harmfully etkisi performans. O zaman bunun bir çeviri dil, özellikle tek bir kod satırında satırlarını bir zillion değilse. Java gibi derlenen diller bu muzdarip değildir; comments zaten derleme sonra kaldırılır.

Update: Bir kod örneği dahil; onlar zaten kendi kendini açıklayan bir ad varsa, özellikle özel özelliklerini Yorumlamak için gerçekten abartılı. Işlevlerine yorumlar tamam.

Burada diğer Commenters tam olarak doğru performansı ile ilgili bulunmaktadır. Kod yorumlarken performans dikkate olmamalıdır.

Ancak, belirli bir örnek üzerinde yorum yapmak, ben senin sınıf içinde çok fazla yorum var inanıyorum. Örneğin, bu alanda bir göz atın:

/**
 * The database user's name.
 * @var string
 */
private $username = "";

Orada "görsel gürültü" bir sürü ve yorum gerçekten zaten bir şey açıklamıyor. Siz okuyucu herhangi bir ilginç ayrıntı söyleme yorumların değerinde 4 hat var. Orada bir yorum koymak istiyorsanız sadece kod ne tekrarlamak değil, kod hakkında bir şeyler interesting açıklamalıdır. Örneğin:

/**
 * The database user's name. This field has to be 5 to 10 characters long. It
 * is not required if the connection security is disabled.
 * @var string
 */
private $username = "";

Başka bir örnek üzerine almak için, bu yorumun bir göz atın:

/** 
 * Gets the specified connection details from this instance. 
 * @param boolean $show_details 
 * @return string The connection string. 
 */
public function getConnectionString($show_details = false) {
    ...

Bu açıklama iyi bir başlangıç ​​olduğunu, ancak bazı önemli bilgileri eksik: show_details parametresi tam olarak ne yapar? Bu etkin değilse ne ayrıntılar eksik olacak? O is etkin olduğunda ya da ne dahil edilecek?

Yorumlar temelde kötü değildir, ve daha yorumlarınızı her zaman az yorumlarla daha kötü değildir. Bu right yorumlarınız için önemlidir!

Arkadaşınız sersemlik konuşuyor.

PHP dinamik ve istendiği gibi komut dosyaları ayrıştırmak gerekir, ama kısa sürede (bir yorum karşılaştığında gibi bir sonraki ilgili satıra düşer çünkü; muhtemelen sadece biraz fazla boşluklarla fazla yükü var) o yorumu ayrıştırmak için gereken zaman ihmal edilebilir ve değeri Kendiniz ve sisteminin gelecekteki bakıcılarına yorum, çok olası performans vurmak çok daha fazladır.

Liberal yorum yapmaktan çekinmeyin.

Eğer olsa, APC veya eCache gibi bir opcode önbelleğe alma mekanizmasını kullanarak PHP oldukça hızlandırabilir. Böyle gerçek çözümler halinde çaba ve zaman yatırım, yorumlarınızı ihmal gibi sersemlik tahmin değil.

Yani, b * llshit bulunuyor yorumlar ayrıştırıldı değil gibi yorumların miktarı, fiili işlem süreleri ile ilgisi ya da çok az şey var.

Eğer kod var daha anlamlı yorum, daha iyi onu korumak zorunda olan bir sonraki için olacaktır.

Eğer yorumlar ihtiyaç vardır yorumlar kullanıyorsanız ve belgelerin bir esinti oluşturulmasını yapacak, phpdoc sözdizimi kullanarak gibi kod örneğinde sunulan yorumlama tarzı örnek olduğunu.

Bazı her sınıf değişkenin yorumlama critizise olabilir, ama benim görüşüme göre, her anlamlı değişken, yöntem ve sınıf bir açıklama olduğunu phpdoc sözdizimi kullanarak nokta.

Kodunuzu anlamı net yapmak için, kadar ihtiyaç olarak Comment. Sen yorum ayrıştırma tarafından değil, varsa, kazanç zaman opak kodu sürdürmenin ağrı bunalmış edilir.

O dedi, yorumlar anlamlı olmalı ve kesinlikle gerekli olandan biraz daha var. Örneğin:

/**
 * The database that this instance will write to, and read from.
 * @var string
 */
private $database = "";

Ben burada büyük yorum kodunuzu şey ekler olup olmadığını sorguluyorlar.

Arkadaşına dinlemeyin. Eğer uygulama profilli ve birçok, birçok megabayt ihtiyacı olacaktır .... PHP dosyaları yorumlarınıza ayrıştırma onun çoğu zaman harcıyor (ve orada değil büyük olasılıkla bulduk sürece mikro performans optimizasyonları endişe etmemesi gerektiğini bu farkedilir olması için) yorumlar.

Bu tür yanlış veri yapılarını kullanarak veya yanlış veritabanı yapılandırma olarak uygulama yavaş çalışmasına neden olabilir birçok yolu vardır. Gerçekleşmesi olasılığı daha yüksektir: bütün yorumları kaldırarak sadece (mantıksal hataları ve daha da önemlisi) performans zarar hataları yapan diğer programcılar karıştırır.

Ben saçma ters erken mikro optimizasyonu bir olgu olduğunu düşünün:

  • Yorum yok sayarak sadece ayrıştırma az karmaşık ve zaman alıcı bir parçası hakkında
  • Performansı önemli ise, ayrıştırma havai alakasız yapma, yine PHP için önbelleğe bir sunucu kullanmak isteyeceksiniz
  • Eğer bir performans sorunu ve tam olarak nerede yatıyor olması kanıtlıyor sabit veri yoksa performans için yönetilebilirliğinin ticaret asla

: Performans PHP kodu için bir öncelik ise, sizin gibi bir bytekod önbelleği kullanmak gerekir

Ayrıştırılır ve baytkoduna derlenmiştir baytkodu önbelleklerini mağaza kodu. Aynı PHP sayfasının sonraki yürütme kodu ayrıştırmak zorunda, Dursun yorumlar değildir.

Bu nedenle, kod sadece performans umurumda değil uygulama dağıtımları darbe performansı yorumlar.