Come nominare i file delle classi spaziate?


9

Manuale di WP Core> Standard di codifica PHP> Convenzioni di denominazione suggerisce quanto segue per nominare file con classi:

I nomi dei file di classe devono essere basati sul nome della classe con class- anteposto e i caratteri di sottolineatura nel nome della classe sostituiti con trattini, ad esempio WP_Errordiventano:

class-wp-error.php

Mentre dalla formulazione della sezione è principalmente inteso per l' uso di base , lo stile di codifica generalmente si applica (e secondo me) a codici WP di terze parti.

Tuttavia, poiché core non supporta gli spazi dei nomi (PHP 5.2, ugh) questo non tiene conto di questo caso.

Qual è il modo pratico per farlo dalla prospettiva della convenienza degli sviluppatori? Supporto di caricatori automatici?

Potrei vedere più modi alternativi:

  • ignorando del tutto lo spazio dei nomi
  • incluso lo spazio dei nomi nel nome del file
  • usando gli spazi dei nomi come livelli di cartella
  • usando del tutto uno schema di denominazione alternativo, come PSR

3
La mia onesta opinione è che se usi PHP 5.3+ stai già violando le regole fondamentali di WP. Inoltre, considera che gli standard WP non tengono conto delle interfacce o dei tratti. Quindi per me ha senso scegliere un modo che è conveniente per te e usare uno standard già stabilito come il PSR sembra una scelta migliore in quel caso.
gmazzap

Risposte:


7

Innanzitutto, ignora il class-prefisso. Questo deriva dal puro approccio al codice procedurale di WordPress, le classi vengono utilizzate come contenitori per il codice procedurale, non per oggetti reali, e la maggior parte dei file non contiene affatto classi o classi e altri codici insieme. Non ha senso quando tutti i tuoi file contengono solo una classe e nient'altro.
Se seguissi quel modello dovresti usare interface-foo.phpe trait-bar.php. Questo non sembra solo ridicolo, rende il caricamento automatico più difficile del necessario.

Il modo più semplice per separare gli spazi dei nomi e i nomi di classe / interfaccia / tratto è (per mia esperienza) assegnare gli spazi dei nomi ai nomi delle directory e i nomi delle classi ai nomi dei file. Questo rende molto facile per mappare la classe richiesta per una data struttura di file nella auto-loader: solo convertire \a /, aggiungere .phpe caricare il file.

Ciò semplifica anche la memorizzazione nella cache delle ricerche: per ogni directory / spazio dei nomi è possibile recuperare tutti i file esistenti la prima volta che viene richiesta la directory e per le chiamate successive è possibile riutilizzare l'elenco di nomi di file senza chiedere file_exists()ogni volta .


4
In altre parole: rendilo compatibile con PSR :)
kaiser,

2

Ho creato una classe per questo requisito, compatibile con PSR-4 e seguendo gli standard di codifica di Wordpress.

Puoi raggiungerlo qui: https://github.com/pablo-pacheco/wp-namespace-autoloader

La spiegazione è tutta lì, ma sostanzialmente è una dipendenza del compositore. Devi solo richiederlo nel tuo progetto:

"require": {    
    "pablo-pacheco/wp-namespace-autoloader": "dev-master"
}

E poi chiama la classe

<?php
new \WP_Namespace_Autoloader( array(    
    'directory'   => __DIR__,       // Directory of your project. It can be your theme or plugin. __DIR__ is probably your best bet.    
    'namespace'   => __NAMESPACE__, // Main namespace of your project. E.g My_Project\Admin\Tests should be My_Project. Probably if you just pass the constant __NAMESPACE__ it should work     
    'classes_dir' => 'src',         // (optional). It is where your namespaced classes are located inside your project. If your classes are in the root level, leave this empty. If they are located on 'src' folder, write 'src' here 
) );

1

In genere vado con la seconda metà delle opzioni:

  • usando gli spazi dei nomi come livelli di cartella
  • usando del tutto uno schema di denominazione alternativo, come PSR

Se si utilizza il compositore per registrare un caricatore automatico PSR-4, è possibile rimanere vicini alle convenzioni di denominazione WP. Spazi dei nomi associati a cartelle che possono contenere caratteri di sottolineatura con file denominati come la classe che può contenere anche caratteri di sottolineatura. Piace:

<Namespace_Dir>/Class_Name.php

Quando WP passa a php 5.3+ (alla fine deve succedere, vero ?!) le linee guida devono essere aggiornate. Poiché la PSR-0 è già obsoleta, la PSR-4 dovrebbe essere almeno consigliata se non richiesta.


0

La soluzione di pablo-sg-pacheco ha funzionato per me, caricando automaticamente il compositore ma compatibile con gli standard di codifica di WordPress, tuttavia l'URL per il repository Github è:

https://github.com/pablo-sg-pacheco/wp-namespace-autoloader

e il nome del pacchetto è:

"require": {    
    "pablo-sg-pacheco/wp-namespace-autoloader": "dev-master"
}

Infine, dovrai anche aggiungere quanto segue a composer.json perché il pacchetto non è disponibile su packagist:

"repositories": [{
    "type": "vcs",
    "url": "https://github.com/pablo-sg-pacheco/wp-namespace-autoloader"
}] 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.