Als het gaat om PHP, houden veel ontwikkelaars van de taal, veel ontwikkelaars haten de taal en veel ontwikkelaars gebruiken het over het algemeen om hun werk gedaan te krijgen.
Voor wat het waard is, ben ik van het laatste kamp. Ik denk dat PHP prima is. Zoals alles, het is niet zonder problemen, maar ik geniet ervan om er goed genoeg mee te werken en zie het als een manier om werk gedaan te krijgen versus een beetje taart-in-de-lucht taal voor een tijdje van utopie van ontwikkeling.
Het ding is, een van de dingen die de liefde van ontwikkelaars over PHP - de functies en flexibiliteit - zijn de dingen die vaak ons struikelen. De lijst is lang, maar in de WordPress-wereld is een van de meest voorkomende punten van verwarring de juiste manier om externe bestanden op te nemen.
PHP biedt vier (!) Manieren om dit te doen en WordPress biedt zelfs zijn eigen variatie daarop.
In dit artikel zullen we de vier manieren onderzoeken die PHP aanbiedt om bestanden op te nemen, richtlijnen voor wanneer ze moeten worden gebruikt, en we zullen de functies van WordPress herzien voor het opnemen van bestanden.
In het algemeen verwijst het opnemen van bestanden met PHP naar de actie van het opnemen van een ander script in de context van het script waaraan u op dit moment werkt.
U kunt dit zien als het importeren van een bestand zodat, wanneer het bestand wordt teruggestuurd vanaf de server, de scripts samen worden gecombineerd in de volgorde waarin ze zijn opgenomen en vervolgens worden geïnterpreteerd als één bestand.
Eerst zullen we kijken naar de manieren om bestanden op te nemen in PHP en de implicaties van elk. Aan het einde van het artikel zullen we bekijken wanneer we dit zouden moeten doen.
include ()
Volgens de PHP-handleiding:
include () bevat het opgegeven bestand en evalueert het. Als het bestand niet wordt gevonden, wordt een PHP-waarschuwing gegenereerd.
Simpel gezegd, dit betekent dat PHP zal kijken naar het bestand dat u probeert op te nemen. Als het wordt gevonden, wordt het aan je script toegevoegd op de exacte plaats die je hebt opgegeven.
Dit is belangrijk om te begrijpen. Stel dat u bijvoorbeeld een reeks functies schrijft die afhankelijk zijn van een eerdere reeks functies. In dat geval moet u ervoor zorgen dat het andere bestand als eerste wordt opgenomen.
Aan de andere kant, als u op zoek bent naar een set functies of een extern bestand in het midden van een bestaande functie, dan kunt u het precies opnemen op de plaats waar u het nodig hebt.
Ten tweede, merk op dat als het bestand ontbreekt, PHP een waarschuwing zal geven. Afhankelijk van de serverconfiguratie, ziet u mogelijk dat dit wordt weergegeven aan de browser of ziet u dit geschreven naar een logbestand (of beide).
Niettemin, waarschuwingen zijn alleen dat - ze worden niet als fataal beschouwd en stoppen meestal niet met de uitvoering, maar ze zijn belangrijk om op te merken, omdat het meestal inhoudt dat een deel van je werk niet correct wordt geladen en / of geïnterpreteerd.
Merk tot slot op dat wanneer een bestand wordt geladen met include ()
dat het toegang heeft tot alle variabelen die eerder zijn gedefinieerd in uw bestaande script.
Stel dat u bijvoorbeeld aan een functie werkt en halverwege de functie, gaat u een afzonderlijk bestand opnemen. Dat afzonderlijke bestand krijgt toegang tot de eerder gedefinieerde variabelen in de functie waarin het is opgenomen.
Hoewel je dit misschien handig vindt, maakt het het externe script een beetje onduidelijk omdat het niet noodzakelijkerwijs aantoont dat het afhankelijk is van extern gedefinieerde variabelen. Dit kan verwarrend zijn, vooral wanneer je met een team werkt.
include_once ()
Rechtstreeks overgenomen uit de PHP-handleiding:
include_once () zal hetzelfde gedrag vertonen als include (), maar zal het bestand niet opnieuw opnemen als het al is opgenomen.
Vanzelfsprekend is het niet nodig om zoveel mogelijk tijd te besteden aan het praten over de algemene punten van include_once ()
, maar er zijn enkele belangrijke verschillen tussen hoe include_once ()
werkt en hoe include ()
werken.
Ten eerste, terwijl include_once ()
presteert grotendeels hetzelfde als include ()
, het zal niet staat u toe om het script opnieuw op te nemen. Dit betekent dat als er ergens anders in uw project een extern bestand is opgenomen, dat is de definitieve locatie waarin dat bestand is opgenomen.
Dus wat is het voordeel hiervan? Behalve dat er maar één plaats is waar een script bij is inbegrepen, zorgt het er ook voor dat variabelen en functies niet noodzakelijkerwijs opnieuw worden gedefinieerd. Bedenk dat bij gebruik include ()
, scripts hebben toegang tot functies en variabelen die hierboven zijn gedefinieerd.
Als u ervoor kiest om een nieuwe reeks variabelen of functies in een bestand te definiëren, neemt u deze op in een ander script en niet gebruik include_once ()
, dan loop je het risico om functies en variabelen opnieuw te definiëren die mogelijk grote problemen met de uitvoering van je code veroorzaken.
Het vereisen van bestanden lijkt op het opnemen van bestanden, omdat het op een andere manier een script kan opnemen in het script dat u aan het schrijven bent, maar het heeft een reeks eigen implicaties voor fouten en beveiliging.
Hoewel je de handeling van het vereisen van een bestand op ongeveer dezelfde manier kunt overwegen als een bestand, kan dit wel impliceren dat het sterker is - dat wil zeggen, het externe bestand is verplicht voor uitvoering.
Zoals we zullen zien, is dit precies zo.
vereisen()
Nogmaals, rechtstreeks uit de PHP-handleiding:
require () voert hetzelfde uit als include () maar werpt een PHP-fatale fout als het bestand niet wordt gevonden.
Dus hier is het ding mee vereisen()
: het voert dezelfde actie uit als include ()
wat betreft het importeren van het externe script in de context van degene waarop je werkt, maar als het het bestand niet kan vinden, wordt er een fout gegenereerd en wordt de uitvoering volledig gestopt.
Dit betekent dat uw toepassing stopt. Met include ()
, je krijgt een waarschuwing en het zal proberen door te gaan.
Op een bepaald niveau lijkt het misschien dat bestanden dat wel zijn de juiste manier om te gaan. Immers, waarom zou je het risico nemen om iets te includeren, alleen maar om een waarschuwing te krijgen met een mogelijke storing in de applicatie.
Maar het komt allemaal neer op de aard van waar je aan werkt. Soms zijn eenvoudige PHP-waarschuwingen in orde - zoals het vergeten van het initialiseren van de index van een array - andere keren heb je een fout nodig.
Er zijn geen harde en snelle regels voor het gebruik van deze versus omvat, maar denk kritisch na over de aard van wat je doet en de implicaties die het met zich meebrengt als het zou falen.
Ten slotte, uit de PHP-handleiding:
require_once () voert hetzelfde uit als require () maar neemt het bestand niet een tweede keer op als het al is opgenomen.
Dit is mogelijk het gemakkelijkst te begrijpen, omdat we de laatste drie functies relatief gedetailleerd hebben behandeld. Simpel gezegd, eenmalig benodigd()
voert precies dezelfde functies uit als vereist, hoewel het niet zal proberen een bestand opnieuw op te nemen als het al in uw script is geladen.
Naast kritisch nadenken over welke functie het beste is voor de aard van uw project, zijn hier twee extra vuistregels te overwegen bij het werken met include ()
en vereisen()
:
eenmalig benodigd()
is beter voor grotere sites omdat het wat extra werk op het lagere niveau doet dat van invloed is op de beveiliging en prestatiesinclude_once ()
is sneller en wordt over het algemeen aanvaardbaar geacht voor kleinere sitesEenvoudig genoeg, maar hoe zit het met WordPress-helperfuncties?
Met al dat gezegd, daar zijn betere manieren dan gebruiken include ()
en vereisen()
om sjablonen in uw WordPress-projecten op te nemen.
Stel bijvoorbeeld dat u meerdere loop-bestanden hebt - één voor een post-formaat:
En je moet ze opnemen in single.php wanneer u werkt aan de enkele berichtpagina van een thema.
Op een bepaald moment was het acceptabel om iets als dit te doen:
include_once ('loop-standaard.php');
Maar dat is niet langer de beste werkwijze.
get_template_part ()
WordPress biedt nu een functie, get_template_part ()
, dat is onderdeel van de native API en wordt specifiek gebruikt voor het hergebruiken van secties - of sjablonen - van code (behalve de koptekst, voettekst en zijbalk) via uw thema.
De functie accepteert twee argumenten:
lus
'.standaard-
','citaat
', of'beeld
'.Laten we bij het vasthouden aan ons voorbeeld hierboven stellen dat we in The Loop zitten en dat we de quote-indeling voor postopmaak willen opnemen. In dat geval doen we het volgende:
if ('quote' == get_post_format ()) get_template_part ('loop', 'quote');
Of, ervan uitgaande dat u uw sjablonen een naam hebt gegeven die overeenkomt met de typen postformaten, kunt u iets zelfs schoner doen:
get_template_part ('loop', get_post_format ());
Schoon, toch?
Je kunt dit een stapje verder zetten. Laten we zeggen dat je je pagineringcode hebt geabstraheerd in zijn eigen sjabloonbestand met de naam pagination.php. Gebruik makend van get_template_part ()
, u kunt dit bijvoorbeeld op uw hele site opnemen, footer.php of in index.php, single.php, archives.php, etc. gewoon door toe te voegen:
get_template_part ('pagination');
Veel gemakkelijker, is het niet?
Dus na dit alles moeten we nog steeds echt de richtlijnen bespreken over wanneer we dat moeten gebruiken. In geen geval ben ik een autoriteit hieromtrent, maar hier zijn de vuistregels die ik volg:
get_template_part ()
.include_once ()
en ik gebruik het meestal een keer in een functie. Je kunt dit in mijn verwarmingsplaten zien.eenmalig benodigd()
.Dat is alles!
Voor meer gedetailleerde uitleg over wat er in dit artikel wordt behandeld, moet u de handleidingpagina's lezen voor elk van de functies:
include ()
include_once ()
vereisen()
eenmalig benodigd()
get_template_part ()