Hoe geef ik een php-variabele door aan een .php-include?

Ik heb een bestand, laten we zeggen dat het index.php is, waar het begin van het bestand een include heeft voor "include.php". In include.php zet ik een variabele als deze:

<?php $variable = "the value"; ?>

dan verder in de in index.php Ik heb een andere include, zeg "include2.php" die als volgt is opgenomen:

<?php include(get_template_directory_uri() . '/include2.php'); ?>

Hoe kan ik de "$ variabele" die ik in de eerste heb gezet opnemen, in "include2.php"?

De exacte code die ik gebruik is als volgt:

De allereerste regel van de index.php Ik heb deze regel

<?php include('switcher.php'); ?>

Inside switcher.php Ik heb dit

<?php $GLOBALS["demo_color"] = "#fffffe"; ?>

Als ik dit in index.php gebruik, werkt het

<?php echo $GLOBALS["demo_color"]; ?>

Als ik echter de volgende code gebruik om een ​​ander php-bestand op te nemen

<?php include(get_template_directory_uri() . '/demo_color.php'); ?>

dan binnen demo_color.php Ik heb deze code:

<?php echo "demo color:" . $GLOBALS["demo_color"]; ?>

Het enige dat het uitvoert is "demokleur:"

bewerkt voor code-indeling

0
Kun je zowel direct voorafgaand aan het opnemen van demo_color.php commentaar geven op de uitvoer van var_dump ($ GLOBALS) en dan opnieuw op de eerste regel van dat bestand? Deel de interessante delen, of kijk hoe ze het vergelijken (is er eigenlijk niet een "demo_color" -sleutel in de latere? ??
toegevoegd de auteur Chris Trahey, de bron
Ok, er zijn een hoop variabelen maar ik heb een var_dumb ($ GLOBALS) gedaan voordat de demo_color.php in de index.php en vervolgens in de include was opgenomen. Je kunt zien waar degene binnen de include begint door te zoeken naar "var dump from inside demo_color.php" brainbuzzmedia .com/themes/vertex
toegevoegd de auteur BRAINBUZZ media, de bron

2 antwoord

Het kan eenvoudig can worden gebruikt in include2.php, tenzij opname van include.php plaatsvindt binnen een ander bereik (dat wil zeggen binnen een functieaanroep). zie hier .

Als u volledig expliciet wilt zijn over de intentie om de variabele in de app te gebruiken, gebruikt u de $ GLOBALS ["variabele"] -versie van de naam, die altijd verwijst naar de variabele variabele in de globale scope.

EDIT: I conducted a test against PHP 5.3.10 to reconstruct this:

// index.php
<?php
include("define.php");
include("use.php");

// define.php
$foo = "bar";

// use.php
var_dump($foo);

Dit werkt precies zoals verwacht, output string (3) "bar".

3
toegevoegd
Zoals je kunt zien in mijn bewerking, heb ik de declare-in-one-include/use-in-another getest en het werkte zoals verwacht. Mogelijk moet u meer specifieke code delen om uw probleem te identificeren.
toegevoegd de auteur Chris Trahey, de bron
Hé, ik vind het leuk dat je een +1 krijgt voor wanneer mensen wijzen op de beste werkwijze; maar -1 om het weg te laten? Op een PHP-vraag, niet minder? Hoe weet ik of dit een baan met 100 regels of een MVC-applicatie is?
toegevoegd de auteur Chris Trahey, de bron
-1 Hoewel je gelijk hebt, denk ik dat je erop had moeten wijzen dat dit een slechte gewoonte is. PHP passeren? veranderlijk naar een PHP include% 23comment14662301_11175727 "> stackoverflow.com/questions/11175594/…
toegevoegd de auteur vascowhite, de bron
Om een ​​of andere reden werkt dit niet. Ik heb de oorspronkelijke vraag bijgewerkt met wat ik heb geprobeerd.
toegevoegd de auteur BRAINBUZZ media, de bron
Zou dit in Wordpress er iets mee te maken hebben? Ik heb de exacte code toegevoegd, zelfs de code voor het definiëren/gebruiken en ik krijg geen uitvoer. Kan het iets te maken hebben met serverinstellingen of machtigingen?
toegevoegd de auteur BRAINBUZZ media, de bron
Eigenlijk is dit een stijlswitcher voor een Wordpress-demo. Javascript in index.ph krijgt de waarde van de colorpicker-invoer, wanneer u op de koppeling klikt die deze linkt naar de startpagina +? Color = colorcode. switcher.php haalt deze query vervolgens uit de URL en stelt deze in als variabele. Dan moet demo_customcolor deze variabele gebruiken om de CSS aan te passen.
toegevoegd de auteur BRAINBUZZ media, de bron
<?php
//index.php
$txt='hello world';
include('include.php');

<?php
//include.php
echo $txt; //will output hello world

Dus het werkt. Hoewel er een groter probleem lijkt te zijn, omdat dit waarschijnlijk moeilijk te onderhouden zal zijn in de toekomst. Gewoon een variabele in de globale naamruimte plaatsen en deze in verschillende bestanden gebruiken, is geen goede gewoonte.

Als u de code beter onderhoudbaar wilt maken, is het misschien een goed idee om klassen te gebruiken, zodat u de variabelen die u nodig hebt, expliciet kunt koppelen in plaats van ze alleen te gebruiken. Omdat de code eromheen niet wordt getoond, is het niet duidelijk wat uw exacte behoefte verder is, maar het is waarschijnlijk dat de code in klassen, functies etc. kan worden geplaatst. Als het een sjabloon is, kunt u denken aan een expliciete set() -functie om te verzenden de variabele gegevens naar de sjablonen en extraheren() daar.

Bewerk:

Stel daarnaast op basis van de informatie eerst je error_reporting in op E_ALL en stel display_errors in op 1. Dus je krijgt alle fouten omdat de informatie die je in je bijgewerkte vraag hebt geplaatst aanwijzingen geeft dat een ontbrekende variabele als constante wordt gebruikt die overal fouten zou moeten veroorzaken de plaats.

1
toegevoegd
Ik begrijp je bericht niet volledig, voor zover ik het zie: je belt alleen naar index.php. De inhoud moet zich in een niet-webtoegankelijke map bevinden, zodat ze sowieso nooit van internet worden gebeld.
toegevoegd de auteur Luc Franken, de bron
"Zou dit in wordpress er iets mee te maken hebben? Ik heb de exacte code toegevoegd, zelfs de code voor het definiëren/gebruiken en ik kan geen uitvoer krijgen. Zou het iets te maken kunnen hebben met serverinstellingen of permissies?" Ik merkte dit punt op (daarom is het belangrijk om een ​​volledige vraag te stellen met alle relevante punten.) Als je Wordpress gebruikt, is dit een raamwerk en bevat het richtlijnen voor het implementeren van op maat gemaakte delen van code. Lees het Wordpress-framework om te zien waar je bent zou dit moeten implementeren. Het lijkt op instellingen voor sjabloneren die waarschijnlijk deel uitmaken van het thema, maar meer informatie daarover is nodig.
toegevoegd de auteur Luc Franken, de bron
Wat bedoel je met dat laatste deel? "Demo dat cookies gebruikt". Voeg alstublieft toe aan uw oorspronkelijke vraag: wat probeert u precies te doen? Je hebt de informatie tot het specifieke probleem in je vraag gereduceerd, wat een geweldige oefening is, maar in dit geval ontbreekt er teveel informatie ben ik bang. Uw voorbeeld gaat over een kleur, geef aan wie die kleur heeft ingesteld en hoe deze in de presentatie moet worden gebruikt. Op basis hiervan kunt u enkele goede werkwijzen ontvangen om dit op de juiste manier op te lossen.
toegevoegd de auteur Luc Franken, de bron
Er is nog een detail over dat misschien wel de crux is. Het bestand waarin de variabele wordt gedeclareerd, is nog steeds in scope wanneer include.php wordt uitgevoerd. Een iets ingewikkelder test is in orde, waarbij het bestand waarin de variabele wordt gedeclareerd buiten het bereik valt (d.w.z. het wordt gedeclareerd in één include en gebruikt in een latere include).
toegevoegd de auteur Chris Trahey, de bron
Goed, niet van internet. Als ik "buiten bereik" zeg, bedoel ik dat het bestand "klaar is met uitvoeren" en terugkeert naar het punt in de code van waaruit het is opgenomen. Ik vroeg me af of op dat moment eventuele variabelen die in het bestand zijn gedeclareerd, zouden worden vernietigd; maar ik heb een test gedaan en dat is niet wat er gebeurt.
toegevoegd de auteur Chris Trahey, de bron
+1 om erop te wijzen dat wat het OP probeert te doen slechte praktijk is en een alternatief suggereert. Te weinig mensen doen dat op SO.
toegevoegd de auteur vascowhite, de bron
Volgens deze wordpress.org/support/topic/… er is gewoon geen manier om dit te doen? Ik kan de WordPress-opties of aangepaste velden niet gebruiken voor een demo die cookies gebruikt.
toegevoegd de auteur BRAINBUZZ media, de bron