Präfixe und Postfixe in PHP (und CSS)



    Vor langer Zeit habe ich mich daran gemacht, Präfixe und Postfixe in PHP und in CSS zu verwenden. Dies gilt insbesondere dann, wenn etwas über die lokale Sichtbarkeit hinausgeht und sich im globalen Raum befindet, dieselben Modelle in Yii zu übernehmen .

    Präfixe und Postfixe haben die Hauptaufgabe, die Entität so eindeutig wie möglich zu machen, so dass sie mit jedem Texteditor leicht gefunden werden kann. Bis heute unterstützen IDE hervorragende Sache - «die Suche Verbräuche von» (Suche Anwendungen) , aber es funktioniert nicht immer Hilfe, und ich will , dass mehr auf unten schreiben.

    Namen in ungarischer Schreibweise mochte ich nicht. Ich habe diesen Ansatz seit C ++ / Delphi nicht gemocht - ich hielt ihn für überflüssig und nicht immer klar. Mir hat die Implementierung von BEM gefallenaber im vollen Umfang benutze ich es auch nicht. Ich habe versucht, die Methoden zu isolieren und zu kombinieren, die mir am besten gefallen haben, und ich werde Ihnen davon erzählen.






    CSS


    Ich starte alle CSS-Klassen mit dem Präfix "cl_", Bezeichner mit dem Präfix "id_". Wenn die Klasse oder der Bezeichner zum Block gehört, füge ich nach dem Präfix "b_" hinzu, wenn zum Modul - "m_". Ich gebe auch interne Zustände oder Miniblöcke mit Präfixen an.

    .cl_b_promoblock {}
    #id_m_user_list {}
    #id_m_order_preview .cl_b_user_info {}
    .cl_user_list_item .cl_visible {}
    #id_b_main_menu .cl_main_menu_item.cl_selected {}
    


    So habe ich immer eindeutige und strukturell nachvollziehbare Namen. Und solche Namen zu finden ist viel einfacher, wenn Sie beispielsweise überarbeiten und sehen müssen, wo sie sich widerspiegeln.

    Übrigens ist ein solcher Code einfacher durch Komprimierung und Verschleierung zu fahren . Darüber hinaus werden keine Analysatoren benötigt - suchen Sie nach regulären Werten durch Präfixe und Komprimierung. Tatsächlich werden deshalb unterschiedliche Präfixe für Bezeichner und Klassen verwendet. Ich denke, der Artikel über Komprimierung und Verschleierung wird für das Habr-Publikum interessant sein. Ich werde versuchen, ihn so zu arrangieren, wie es Zeit ist.




    PHP (Yii)


    Es ist irgendwie falsch, dass Controller, Validatoren usw. haben zusätzliche Präfixe und Postfixes, Modelle jedoch nicht. Ich entschied, dass es aufgrund der „Magie“ von Yii schwierig sein würde, den Verwendungsort der Benutzerklasse zu finden, und dass mit einer einfachen Textsuche das Wort Benutzer gefunden werden würde, wo immer dies möglich ist.

    Daher werden Modellklassen als WbUserModel, WbCatalogItemModel usw. bezeichnet, wobei:
    • Wb: Projektkennung (Kurzform für Name);
    • Benutzer: eigentlich das Modell;
    • Modell: bedeutet, dass es sich um ein Modell und nicht um etwas anderes handelt.


    Validatoren (WbExistsByPkValidator, WbCensureValidator) und eigene Hilfsbibliotheken (LArray, LTime, LString) , bei denen das Präfix „L“ eine Abkürzung für Library ist , fallen ebenfalls unter dieses Muster . Für Bibliotheken können Sie auch StringLib oder ArrayLib verwenden, aber meiner Meinung nach werden sie mit dem Präfix "L" nacheinander in die Dateiliste aufgenommen, was praktisch ist. Übrigens füge ich für "scope" -Methoden auch Präfixe hinzu, zum Beispiel ScopePublished () oder ScopeLast (int $ limit), um sie von "normalen" Methoden zu unterscheiden.

    Die Verwendung solcher Namen gibt Einzigartigkeit, und in diesem Fall kann ich sogar alle Verwendungen einer bestimmten Klasse finden, auch ohne eine IDE. Ich versuche auch auf jede erdenkliche Weise, die Verwendung der textuellen Darstellung von Klassen und Attributen aufzugeben. Ich halte es insbesondere für ein großes Übel, wenn aus der Vereinigung von Zeichenfolgen eine Verknüpfung zu einer Klasse erstellt wird - dies kann weder durch "Suchen von Verwendungen" noch durch eine Suche im Text gefunden werden. Zum Beispiel:

    public function actionGetData($object_type) {
        $model_class = 'Wb' . $object_type . 'Model';
        $model = new $model_class();
        return $model;
    }
    


    Um Relationen in Yii zu benennen, verwende ich auch ein spezielles Präfix - "R_" (kurz für Relation) . Somit ist auf einen Blick sofort klar, dass dies kein Attribut des Modells ist, sondern eine Verbindung zu einem anderen Modell. Obwohl nach dem Yii-Konzept dies als ein und dasselbe (Attribut des Modells) dargestellt wird, denke ich immer noch, dass dies verschiedene Dinge sind. Neben dem Hinzufügen eines Präfixes füge ich immer auch den Modellklassennamen hinzu. Ja, dieser Ansatz mag weniger schön, aber trocken und spezifisch sein. Wenn ich mir den Code anschaue, verstehe ich sofort, worauf es ankommt und woher die Daten stammen.

    public function relations() {
        return array(
            'R_PriceItems' => array(self::HAS_MANY, WbCatalogPriceItemModel::CLASS, 'category_id'),
            'R_CategoryParent' => array(self::BELONGS_TO, WbCatalogCategoryModel::CLASS, array('parent_id' => 'id'),
        )
    }
    public function RecalculatePriceItems() {
        foreach ($this->R_PriceItems as $price_item) {
            $price_item->price = $price_item->new_price;
        }
    }
    


    Wie Sie im obigen Code sehen können (Relations-Methode) , definiere ich Klassen für verwandte Modelle dynamisch, nicht für Text. Dies ist jedoch nur für PHP> 5.5 möglich . Wenn (und wahrscheinlich auch) der Server diese PHP-Version nicht unterstützt, können Sie ActiveRecord erweitern und anstelle von CLASS die Methode _CLASS_ () verwenden. Nach dem Umstieg auf PHP> 5.5 ist es dann problemlos möglich, _CLASS_ () durch CLASS durch ein einfaches „Find And Replace“ zu ersetzen.

    class ActiveRecord extends CActiveRecord {
        public static function _CLASS_() {
            return get_called_class();
        }
    }
    





    "FÜR" oder "GEGEN"


    In meinem Umfeld gibt es Befürworter sowohl von "FOR" als auch von "AGAINST" für eine solche Namensgebung.

    Insbesondere verwenden sie das Präfix "_" ($ _items, $ _version) für private Eigenschaften und Methoden . Es kommt häufig vor, dass für Tabellen in der Datenbank das Projektpräfix angegeben wird, z. B. wb_catalog_item. Der Quellcode von YouTube-Seiten enthält überall das Präfix „yt-“ in HTML und CSS (dies stellt höchstwahrscheinlich auch sicher, dass beim Herstellen einer Verbindung zu Websites von Drittanbietern keine Konflikte auftreten) .

    Gegen ein solches Benennungsschema kann man die Tatsache anführen, dass diese Informationen redundant sind und es sich ( sozusagen ) nicht lohnt, den Code mit Präfixen und Postfixen zu verunreinigen. Darüber hinaus ist es notwendig, andere (und neue) Mitarbeiter zu unterrichten, um zu verstehen, wie und was sie benennen sollen (obwohl ich dies persönlich nicht als Problem sehe).

    Ja, Präfixe und Postfixes verlangsamen das Schreiben von Code etwas, aber der Code wird nur einmal geschrieben und mehr als einer wird gelesen und überarbeitet. Was mich betrifft, ist es viel einfacher, Code zu lesen, in dem Sie sofort anhand von Präfixen feststellen können, wo das Modellattribut, wo die Methode und wo der Umfang oder die Beziehung liegen. Das Präfix „R_“ macht deutlich, dass es sich um eine Verbindung handelt, und das Postfix „Model“, dass es sich um ein Modell handelt. Beispielsweise gibt es eine WebUser-Klasse - dies ist eine Komponente (erweitert CWebUser) und es gibt eine User-Klasse - und dies ist bereits ein Modell.

    Und schließlich ... benutzt Yii überall Rufketten. Zum Beispiel $ category-> first_item-> store. In diesem Fall ist Geschäft eine Beziehung, dh Kommunikation mit dem Lager. Zu einem bestimmten Zeitpunkt müssen Sie der Tabelle catalog_item jedoch eine neue Spalte mit dem Namen store hinzufügen. Hier setzt das Problem an, denn mit der üblichen Vorgehensweise können Sie ohne Codeanalyse die Geschäftsverbindung nicht übernehmen und durch etwas anderes ersetzen, sodass kein Namenskonflikt besteht. Bei Verwendung von Präfixen wird in 1-2-3 Minuten alles auf der Ebene von "Suchen und Ersetzen" entschieden.




    Ich möchte vom Habr-Publikum nur eine konstruktive Diskussion über diesen Ansatz hören. Vielleicht gibt es andere Lösungen für Probleme mit nicht eindeutigen Namen.

    Nur registrierte Benutzer können an der Umfrage teilnehmen. Bitte komm rein .

    Soll ich Präfixe und Postfixe verwenden?

    • 23,4% Ja, es kostet 63
    • 76,5% Nein, nicht 206 wert

    Jetzt auch beliebt: