När det gäller PHP, många utvecklare älskar språket, hatar många utvecklare språket, och många utvecklare brukar bara använda det för att få jobbet gjort.
För vad det är värt, är jag av det senare lägret. Jag tycker PHP är bra. Liksom allt är det inte utan problem, men jag tycker om att arbeta med det tillräckligt bra och se det som ett sätt att få jobb gjort mot något spetsigt språk för en viss tid av utvecklingens utopi.
Saken är en av de saker som utvecklarens kärlek till PHP - dess funktioner och flexibilitet - är de saker som ofta leder oss upp. Listan är lång, men i WordPress-världen är en av de vanligaste förväxlingspunkterna rätt sätt att inkludera externa filer.
PHP erbjuder fyra (!) Sätt att göra detta och WordPress erbjuder även sin egen variant av det.
I den här artikeln undersöker vi de fyra sätt som PHP erbjuder att inkludera filer, riktlinjer för när du ska använda var och en, och vi granskar WordPress-funktioner för att inkludera filer.
I allmänhet inkluderar filer med PHP hänvisning till åtgärden att inkludera ett annat skript i det skript som du arbetar med.
Du kan tänka på det här som att importera en fil så att när filen returneras från servern kombineras skriptna i den ordning de ingår och tolkas som en enda fil.
Först ska vi titta på sätt att inkludera filer i PHP och konsekvenserna av varje. I slutet av artikeln granskar vi när vi ska göra detta.
inkludera()
Enligt PHP manualen:
inkludera () kommer att inkludera och utvärdera den angivna filen. Om filen inte hittas kommer en PHP-varning att kastas.
Enkelt uttryckt betyder det att PHP kommer att titta på den fil som du försöker inkludera. Om den hittas kommer den att läggas till ditt manus på exakt plats som du har förklarat det.
Detta är viktigt att förstå. Låt oss till exempel säga att du skriver en uppsättning funktioner som beror på en tidigare uppsättning funktioner. I så fall måste du se till att den andra filen ingår först.
Å andra sidan, om du vill ta in en uppsättning funktioner eller en extern fil mitt i en befintlig funktion, kan du inkludera den exakt på den plats du behöver.
För det andra, notera att om filen saknas, kommer PHP att kasta en varning. Beroende på serverkonfigurationen kan det hända att du gör det här till webbläsaren eller det kan du se att det skrivs till en loggfil (eller båda).
Ändå är varningar bara det - de anses inte som dödliga och stoppar inte typiskt utförandet, men de är viktiga att notera eftersom det i allmänhet innebär att en del av ditt arbete inte laddas korrekt och / eller tolkas.
Slutligen notera att när en fil laddas med inkludera()
att det kommer att ha tillgång till alla variabler som tidigare definierats i ditt befintliga skript.
Till exempel, säg att du arbetar med en funktion och halvvägs genom funktionen, du kommer att inkludera en separat fil. Den separata filen kommer att ha tillgång till de variabler som definierats tidigare i funktionen där den ingår.
Även om du kan se detta så bekvämt, gör det externa skriptet lite oklart, eftersom det inte nödvändigtvis visar att det är beroende av variabler som definieras externt. Detta kan vara förvirrande, särskilt när du arbetar med ett lag.
include_once ()
Hämtad direkt från PHP-manualen:
include_once () kommer att utföra samma beteende som inkludera () men kommer inte att inkludera filen igen om den redan ingår.
Självklart är det inte nödvändigt att spendera så mycket tid att prata om de allmänna punkterna i include_once ()
, men det finns några viktiga differentiatorer mellan hur include_once ()
fungerar och hur inkludera()
Arbetar.
För det första, medan include_once ()
utför i stort sett samma som inkludera()
, Det kommer inte tillåter dig att inkludera manuset igen. Det betyder att om någon annanstans i ditt projekt har en extern fil inkluderats, så är det den definitiva platsen där den filen har inkluderats.
Så vad är fördelen med detta? Bortsett från att man försäkrar att det bara finns en enda plats där ett manus ingår, säkerställer det också att variabler och funktioner inte nödvändigtvis ska omdefinieras. Minns det när du använder inkludera()
, Skript har tillgång till funktioner och variabler som definieras ovanför dem.
Om du väljer att definiera en ny uppsättning variabler eller funktioner i en fil, inkludera den i ett annat skript och inte använda sig av include_once ()
, då riskerar du att omdefiniera funktioner och variabler som kan orsaka stora problem med exekveringen av din kod.
Kräver filer som liknar att inkludera filer eftersom det är ett annat sätt att du kan inkludera ett skript i det skript som du skriver för närvarande, men det har en rad egna konsekvenser kring fel och säkerhet.
Även om du kan överväga att man kräver en fil på ungefär samma sätt som du kan inkludera en fil, har den konsekvensen att den är starkare, det vill säga den externa filen är nödvändig för utförande.
Som vi kommer se, är detta exakt det här fallet.
fordra()
Återigen, direkt från PHP-manualen:
kräva () utför samma som inkludera () men kommer att kasta ett PHP-felaktigt fel om filen inte hittas.
Så här är saken med fordra()
: Det kommer att utföra samma åtgärd som inkludera()
När det gäller att importera det externa skriptet i sammanhanget med det du arbetar med, men om det inte hittar filen, kasta det ett fel och stoppar körningen helt.
Det innebär att din ansökan slutar. Med inkludera()
, du får en varning och det kommer att försöka fortsätta.
På viss nivå kan det verka som att filerna är obligatoriska de rätt sätt att gå. Tja, varför skulle du vilja riskera med något bara för att få en varning med ett eventuellt misslyckande i ansökan.
Men allt kommer ner på vad du jobbar på. Ibland är enkla PHP-varningar okej - som att glömma att initialisera indexet för en array - andra gånger behöver du ett fel.
Det finns inte några svåra och snabba regler för när man ska använda detta mot, men men tänker kritiskt på arten av vad du gör och vilka konsekvenser den bär om det skulle misslyckas.
Slutligen, från PHP-manualen:
require_once () utför samma som krävs () men kommer inte att inkludera filen för andra gången om den redan ingår.
Det här är kanske det enklaste att förstå eftersom vi har täckt de tre sista funktionerna i relativ detalj. Enkelt uttryckt, require_once ()
utför exakt samma funktioner som krävs, men det försöker inte att inkludera en fil igen om den redan är laddad i ditt skript.
Förutom att kritiskt tänka igenom vilken funktion som bäst passar för ditt projekts natur, är det här två extra tumregler att överväga när man arbetar med inkludera()
och fordra()
:
require_once ()
är bättre för större webbplatser eftersom det gör lite extra arbete på lägre nivå som påverkar säkerhet och prestandainclude_once ()
är snabbare och anses generellt acceptabelt för mindre platserLätt nog, men vad sägs om WordPress-hjälparfunktioner?
Med allt sagt det där är bättre sätt än att använda inkludera()
och fordra()
att inkludera mallar i dina WordPress-projekt.
Säg till exempel att du har flera loop-filer - en för ett postformat:
Och du måste inkludera dem i single.php när du arbetar på ett temas enda inläggssida.
Vid ett tillfälle var det acceptabelt att göra något så här:
include_once ('loop-standard.php');
Men det är inte längre den bästa praxisen.
get_template_part ()
WordPress erbjuder nu en funktion, get_template_part ()
, det är en del av det ursprungliga API-en och används speciellt för att återanvända sektioner - eller mallar - av kod (med undantag för sidhuvud, sidfot och sidofält) genom ditt tema.
Funktionen accepterar två argument:
slinga
'.standard-
','Citat
'eller'bild
'.I enlighet med vårt exempel ovan, låt oss säga att vi är i The Loop och vi vill inkludera citationsteckenformatmallen. I så fall skulle vi göra följande:
om ('citat' == get_post_format ()) get_template_part ('loop', 'quote');
Eller, om du antar att du har namngett dina mallar för att matcha postformattyperna, kan du göra någonting renare än:
get_template_part ("loop", get_post_format ());
Ren, höger?
Du kan faktiskt ta det här ett steg längre. Låt oss säga att du har abstraherat din paginationskod ut i sin egen mallfil kallad pagination.php. Använder sig av get_template_part ()
, du kan inkludera detta på hela din webbplats i, säg, footer.php eller i index.php, single.php, archives.php, etc. helt enkelt genom att lägga till:
get_template_part ('pagination');
Mycket lättare, är det inte?
Så efter allt detta har vi fortfarande inte faktiskt diskutera riktlinjerna för när man ska använda vad. Jag är inte behörig på detta, men här är de tumregler som jag följer:
get_template_part ()
.include_once ()
och jag brukar använda den en gång i en funktion. Du kan se detta i min panna.require_once ()
.Det är allt!
För mer utförliga förklaringar av vad som omfattades av den här artikeln, se till att läsa de manuella sidorna för var och en av funktionerna:
inkludera()
include_once ()
fordra()
require_once ()
get_template_part ()