Når det gjelder PHP, mange utviklere elsker språket, hater mange utviklere språket, og mange utviklere bruker det vanligvis bare for å få sitt arbeid gjort.
For hva det er verdt, er jeg av den sistnevnte leiren. Jeg tror PHP er greit. Som noe, er det ikke uten problemer, men jeg liker å jobbe med det godt nok og se det som en måte å få jobbet på, i motsetning til noe spiss i himmelen for en tid med utopi av utvikling.
Saken er, en av tingene som utviklerens kjærlighet om PHP - dens funksjoner og fleksibilitet - er de veldig tingene som ofte drar oss opp. Listen er lang, men i WordPress-verdenen er en av de vanligste punktene for forvirring riktig måte å inkludere eksterne filer på.
PHP tilbyr fire (!) Måter å gjøre dette, og WordPress tilbyr selv sin egen variasjon derav.
I denne artikkelen vil vi undersøke de fire måtene som PHP tilbyr for å inkludere filer, retningslinjer for når du skal bruke hver, og vi vurderer WordPress 'funksjoner for å inkludere filer.
Generelt, inkludert filer med PHP, refererer til handlingen med å inkludere et annet skript i konteksten til skriptet du arbeider for øyeblikket.
Du kan tenke på dette som å importere en fil slik at når filen returneres fra serveren, blir skriptene kombinert sammen i den rekkefølgen de er inkludert i, og tolkes deretter som en enkelt fil.
Først vil vi se på måtene å inkludere filer i PHP og konsekvensene av hver. På slutten av artikkelen vurderer vi når vi skal gjøre dette.
inkludere()
Ifølge PHP manualen:
inkludere () vil inkludere og evaluere den angitte filen. Hvis filen ikke er funnet, vil en PHP advarsel bli kastet.
Enkelt sagt betyr dette at PHP vil se på filen du forsøker å inkludere. Hvis den er funnet, blir den lagt til i skriptet ditt på det nøyaktige stedet du har oppgitt.
Dette er viktig å forstå. For eksempel, la oss si at du skriver et sett med funksjoner som avhenger av et tidligere sett med funksjoner. I så fall må du sørge for at den andre filen er inkludert først.
På den annen side, hvis du ønsker å ta med et sett med funksjoner eller en ekstern fil midt i en eksisterende funksjon, så kan du inkludere det akkurat der du trenger det.
For det andre, merk at hvis PHP-filen mangler, vil PHP kaste en advarsel. Avhengig av serverkonfigurasjonen kan du se dette gjengitt til nettleseren, eller du kan se dette skrevet til en loggfil (eller begge).
Ikke desto mindre er advarsler bare det - de blir ikke ansett som dødelige og stopper vanligvis ikke gjennomføringen, men de er viktige å merke seg fordi det generelt innebærer at en del av arbeidet ditt ikke blir korrekt lastet og / eller tolket.
Endelig merk at når en fil lastes med inkludere()
at den vil ha tilgang til alle variablene som tidligere er definert i ditt eksisterende skript.
For eksempel, si at du jobber med en funksjon og halvveis gjennom funksjonen, du skal inkludere en egen fil. Den separate filen vil ha tilgang til variablene som er definert tidligere i funksjonen som den er inkludert i.
Selv om du kanskje ser dette som praktisk, gjør det eksternt skript litt uklart, da det ikke nødvendigvis viser at det er avhengig av variabler som er definert eksternt. Dette kan være forvirrende, spesielt når du arbeider med et lag.
include_once ()
Tatt direkte fra PHP manualen:
include_once () vil utføre samme oppførsel som include (), men vil ikke inkludere filen igjen hvis den allerede er inkludert.
Tydeligvis er det ikke nødvendig å bruke så mye tid på å snakke om de generelle punktene i include_once ()
, men det er noen viktige differensier mellom hvordan include_once ()
fungerer og hvordan inkludere()
virker.
Først mens include_once ()
Utfører stort sett det samme som inkludere()
, det vil ikke la deg inkludere skriptet igjen. Dette betyr at hvis et annet sted i prosjektet ditt, har en ekstern fil blitt inkludert, det er den endelige plasseringen der den filen er inkludert.
Så hva er fordelen med dette? Bortsett fra å sikre at det bare er et enkelt sted der et skript er inkludert, sikrer det også at variabler og funksjoner ikke nødvendigvis vil bli omdefinert. Husk det når du bruker inkludere()
, Skript har tilgang til funksjoner og variabler som er definert over dem.
Hvis du velger å definere et nytt sett med variabler eller funksjoner i en fil, må du inkludere det i et annet skript og ikke bruk include_once ()
, så risikerer du å definere funksjoner og variabler som potensielt forårsaker store problemer med utførelsen av koden din.
Krevende filer ligner på å inkludere filer fordi det er en annen måte at du kan inkludere et skript i skriptet du skriver for øyeblikket, men det har et sett med egne implikasjoner rundt feil og sikkerhet.
Selv om du kan betrakte handlingen med å kreve en fil på samme måte som du kan inkludere en fil, har den konsekvensen at den er sterkere - det vil si at den eksterne filen er nødvendig for utførelse.
Som vi ser, er dette nettopp dette tilfellet.
kreve ()
Igjen, rett fra PHP manualen:
krever () utfører det samme som inkluderer (), men vil kaste en PHP-fatal feil hvis filen ikke ble funnet.
Så her er tingen med kreve ()
: Det vil utføre samme handling som inkludere()
så langt som å importere eksternt skript i sammenheng med den du jobber med, men hvis den ikke klarer å finne filen, kaster den en feil og stopper fullstendig fullføringen.
Dette betyr at søknaden din stopper. Med inkludere()
, Du får en advarsel, og det vil forsøke å fortsette.
På et visst nivå kan det virke som å kreve at filer er de riktig vei å gå. Tross alt, hvorfor vil du risikere å inkludere noe bare for å få en advarsel med potensiell feil i søknaden.
Men alt kommer ned på hva du jobber med. Noen ganger er enkle PHP advarsler i orden - som å glemme å initialisere indeksen til en matrise - andre ganger trenger du en feil.
Det er ikke harde og raske regler for når du skal bruke dette versus inkluderer, men tenk kritisk på hva du gjør og hva det medfører hvis det skulle mislykkes.
Til slutt, fra PHP-manualen:
require_once () utfører det samme som krav (), men vil ikke inkludere filen en gang hvis den allerede er inkludert.
Dette er muligens det enkleste å forstå siden vi har dekket de tre siste funksjonene i relativ detalj. For å si det enkelt, require_once ()
utfører nøyaktig samme funksjoner som nødvendig, men det vil ikke forsøke å inkludere en fil igjen hvis den allerede er lastet inn i skriptet ditt.
I tillegg til å kritisk tenke gjennom hvilken funksjon som passer best for prosjektets natur, er det to ekstra tommelfingerregler å vurdere når du arbeider med inkludere()
og kreve ()
:
require_once ()
er bedre for større nettsteder som det gjør noe ekstra arbeid på lavere nivå som påvirker sikkerhet og ytelseinclude_once ()
er raskere og anses generelt akseptabelt for mindre stederEnkelt nok, men hva med WordPress-hjelperfunksjoner?
Med alt det sagt, der er bedre måter enn å bruke inkludere()
og kreve ()
å inkludere maler i WordPress-prosjektene dine.
Si for eksempel at du har flere loop-filer - en for et innleggformat:
Og du må inkludere dem single.php når du jobber på et temas enkelt innleggsside.
På et tidspunkt var det akseptabelt å gjøre noe slikt:
include_once ('loop-standard.php');
Men det er ikke lenger den beste praksisen.
get_template_part ()
WordPress tilbyr nå en funksjon, get_template_part ()
, som er en del av den innfødte API-en, og brukes spesielt til å gjenbruke seksjoner - eller maler - med kode (unntatt topptekst, bunntekst og sidebar) gjennom temaet ditt.
Funksjonen godtar to argumenter:
sløyfe
'.standard
','sitat
', eller'bilde
'.I tråd med vårt eksempel over, la oss si at vi er i The Loop, og vi vil inkludere sitatformatmalen. I så fall gjør vi følgende:
hvis ('sitat' == get_post_format ()) get_template_part ('loop', 'quote');
Eller, forutsatt at du har kalt dine maler for å matche postformattyper, kan du gjøre noe enda renere:
get_template_part ('loop', get_post_format ());
Rent, rett?
Du kan faktisk ta dette et skritt lenger. La oss si at du har abstradert din pagineringskode ut i sin egen malfil kalt pagination.php. Ved hjelp av get_template_part ()
, Du kan inkludere dette på hele nettstedet ditt i, si, footer.php eller i index.php, single.php, archives.php, etc. bare ved å legge til:
get_template_part ('pagination');
Mye enklere, er det ikke?
Så etter alt dette har vi fortsatt ikke til å faktisk diskutere retningslinjene for når du skal bruke det. På ingen måte har jeg en autoritet på dette, men her er tommelfingerregler som jeg følger:
get_template_part ()
.include_once ()
og jeg bruker det vanligvis en gang i en funksjon. Du kan se dette i min kjeleplater.require_once ()
.Det er alt!
For mer detaljerte forklaringer på hva som var dekket i denne artikkelen, må du lese de manuelle sidene for hver av funksjonene:
inkludere()
include_once ()
kreve ()
require_once ()
get_template_part ()