Ik wil het liefst een functie inladen vanuit een ander php-bestand d.m.v. echoën. Ik heb de volgende testopstelling gemaakt:
include-test.php:
<?php include("include.php"); ?>
<!DOCTYPE HTML>
<html>
<head>
    <title>Demo</title>
    <meta charset="windows-1252" />
</head>
<body>
<?php echo $function ?>
</body>
</html>

en include.php:
<?php
$function = '
    <?php
        if (!isset($_GET["p"]))
        {echo "Gelukt!";}
    ?>
';
?>


Het lukt echter alleen als ik het zo doe:

include-test.php:
<!DOCTYPE HTML>
<html>
<head>
    <title>Demo</title>
    <meta charset="windows-1252" />
</head>
<body>
<?php include("include.php"); ?>
</body>
</html>

en include.php:

    <?php
        if (!isset($_GET["p"]))
        {echo "Gelukt!";}
    ?>


Waarom krijg ik bij de eerste testopstelling geen 'Gelukt!' als ik include-test.php open?
Omdat je daar de PHP-code wilt echoén, en dat werkt niet.
Ik denk dat jij dit wilt:
<?php
include("include.php");
?>
<!DOCTYPE HTML>
<html>
<head>
    <title>Demo</title>
    <meta charset="windows-1252" />
</head>
<body>
<?php 
echo lukthet();
?>
</body>
</html>


En dan dit als include.php:
<?php
function lukthet()
{
global $_GET;
if(isset($_GET['p']))
{
return 'Gelukt!';
}

return 'Niet gelukt';
}
?>

Ik heb dus nu een functie met de naam lukthet gemaakt.
Die kijkt zelf naar $_GET (die hoef je dus niet door te geven!) of die er is of niet.
En zo ja: dan GEEFT hij (return) hij wat tekst terug.
Die echo je in je code zelf (niet in de functie).

Probeer even exact te snappen wat het doet en hoe het werkt.
Vragen? Stel ze gerust.
Eddy E op 04/03/2013 16:57:48

global $_GET;


$_GET is een superglobal dus die hoef je nooit global te maken. Dat is ie al.
Ha die Zunflappie! Ik ken je nog van Webmastercity. :)

Het is me in zoverre duidelijk dat ik alles wat ik nodig heb me duidelijk is. En met de standaard include-functie kom ik er ook. Alleen begrijp ik niet goed waarom mijn echoën niet lukt en het jouwe wel. Want jij echoot toch ook een functie?

Dat jouw functie ergens anders uitgevoerd wordt en dat daarna het resultaat ervan teruggegeven wordt is me duidelijk, maar het is me niet helemaal duidelijk waarom ik niet gewoon een functie in zijn geheel kan echoën. Wat is het verschil tussen echoën en includeren, in deze? Want daar komt het op neer.
Ik vond uiteindelijk zelfs nog drie manieren om (het resultaat van) een PHP-functie over te brengen naar/te gebruiken in een ander bestand, naast de manier al beschreven in mijn eerste bericht:

php-transfer.php:

<?php require("php-transfer-required.php"); ?>
<?php echo $part_1 ?>
    <title>Demo</title>
    <style>
    html.normal {
        background: yellow;
    }
    html.touch {
        background: red;
    }
    body {
        margin: 50px;
        padding: 50px;
        color: white;
    }
    body.normal {
        background: green;
    }
    body.touch {
        background: black;
    }
    </style>
</head>
    <body class="<?php echo detectMachineType() ?>">
        <p>Er zijn dus maar liefst nog drie manieren 
        om (het resultaat van) een PHP-functie over 
        te brengen naar/te gebruiken in een ander bestand 
        (cookie-waarde: <?php echo $cookie_waarde ?>)...</p>
    </body>
</html>

php-transfer-required.php:

<?php
function detectMachineType() {
    if(isset($_COOKIE['machineType']))
        { $cookie_val = $_COOKIE['machineType']; }
    else
        { $cookie_val = "normal"; }
    return $cookie_val;
}

$cookie_waarde = detectMachineType(); /* $cookie_val laten 
echoën levert een undefined-variable-melding op */

$part_1 =
'<!DOCTYPE html>
<html class="'.detectMachineType().'">
<head>
    <meta charset="utf-8">
'
?>

Reageren