några sidor på nätet om PHP programmering

Sök efter  
Börja här Uppgifter Testa dig själv Tips Sidokarta mm. Länkar Sök

Programfiler Övriga funktioner

1.13.1 Programfiler

För att inte behöva skriva samma kod flera gånger, och för att kunna återanvända kod så har PHP några kodspecifika metoder:

Se även: include *

include

Include tar och sätter in och kör programkoden i en fil. Nedan är en liten simpel fil som bara skriver "Hello world"

<?php
    
echo "Hello World";
?>
Listning 1.13.1.1 - samples/s111.php

Hello World
Resultat av listning 1.13.1.1

Denna kan sedan inkluderas i en annan fil

<?php
    
include("./samples/s111.php");
    echo
"<br />";
    include(
"./samples/s111.php");
    echo
"<br />";
    include(
"./samples/s111.php");
?>
Listning 1.13.1.2 - samples/s112.php

Hello World
Hello World
Hello World
Resultat av listning 1.13.1.2

Det är dock sällan så god idé att låta den inkluderade filen skriva ut någonting. Inkluderingsfilerna skall helst innehålla funktioner. Detta gör dem mer användbara, och koden blir mer modulär. Se nedanstående exempel:

<?php
    
function HelloWorld()
    {
        return
"Hello World";
    }
?>
Listning 1.13.1.3 - samples/s113.php
[Visa i separat fönster]

<?php
    
include("./samples/s113.php");
    echo
HelloWorld();
    echo
"<br />";
    echo
HelloWorld();
    echo
"<br />";
    echo
HelloWorld();
?>
Listning 1.13.1.4 - samples/s114.php

Hello World
Hello World
Hello World
Resultat av listning 1.13.1.4

Det kan dock förekomma att man råkar inkludera samma fil på flera ställen. Detta kommer att ge ett felmeddelanden:

<?php
    
include("s113.php");
    include(
"s113.php");
    echo
HelloWorld();
    echo
"<br />";
    echo
HelloWorld();
    echo
"<br />";
    echo
HelloWorld();
?>
Listning 1.13.1.5 - samples/s115.php


Fatal error: Cannot redeclare helloworld() (previously declared in /home/vhome/enges.org/www/phpkurs/samples/s113.php:4) in /home/vhome/enges.org/www/phpkurs/samples/s113.php on line 2
Resultat av listning 1.13.1.5

include_once

Include_once fungerar precis som include, men om man råkar inkludera filen flera gånger kommer den ändå att bara inklueras en gång. Se nedan:

<?php
    
include_once("s111.php");
    echo
"<br />";
    include_once(
"s111.php");
    echo
"<br />";
    include_once(
"s111.php");
?>
Listning 1.13.1.6 - samples/s116.php

Hello World

Resultat av listning 1.13.1.6

Om man har funktionsbibliotek som inkluderas så skall man således använda include_once och inte include.

require

Require fungerar lite som include men medan include går att programmera, t.ex. med if, kommer require alltid att utföras. Se nedanstående exempel

<?php
    
function HelloAgain()
    {
        return
"Hello World";
    }
?>
Listning 1.13.1.7 - samples/s118.php

Resultat av listning 1.13.1.7

Ovanstående fil sätts in med require:

<?php
    
if (false)
    {
        
# denna kommer aldrig att bli inkluderad
        
include("./samples/s113.php");
    }
    echo
"<br />";
    if (
false)
    {
        
# denna kommer att bli inkluderad
        # fast vi egentligen aldrig borde komma hit
        
require("./samples/s118.php");
    }

    
# denna funktion fanns i s118.php
    
echo HelloAgain();
?>
Listning 1.13.1.8 - samples/s117.php


Hello World
Resultat av listning 1.13.1.8

require_once

Denna fungerar som require, men kommer endast att utföras en gång. Se include_once.

include_path

I php.ini finns det en rad include_path.

Om den är satt till:

För UNIX

include_path = ".:/php/includes"

För Windows

include_path = ".;c:\php\includes"

 

Kommer inkluderingsfiler i första hand att sökas i nuvarande katalog och i andra hand i den eller de katalog som som anges med : (Unix) eller ; (WIN) mellan. Anger man pathen för en include fil, t.ex. ./samples/s111.php, så antas samples katalogen finnas unde den nuvarande katalogen.

Detta kan ibland ställa till problem. Mest specifikt är problemet om vi har en fil som inkluderar en annan fil och denna i sin tur inkluderar en tredje:

filen.php
inkluderar
./samples/inkluderad.php

som i sin tur inkluderar

entill.php

som finns i samma katalog som inkluderad.php. Vilken är nuvarande katalog för inkluderad.php? Det är inte samples katalogen för filen.php har inkluderat den, och filen.php finns inte i samples. inkluderad-php skulle då behöva inkludera ./samples/entill.php, fast den är i samma katalog. Detta gör livet lite mer invecklat.

En lösning som fungerar är följande

<?php
    
# säkerställ att entill altid antas vara i samma
    # katalog som inkludera.php (denna fil)
    
include_once( dirname( __FILE__ ) . "/entill.php" );
?>
Listning 1.13.1.9 - samples/inkluderad.php

Resultat av listning 1.13.1.9

   Börja härPHP FilerProgramfiler