Avatar billede palito Nybegynder
21. august 2008 - 15:57 Der er 2 kommentarer

Justering ved view-klasse

Hej jeg har lavet nedenstående klasse, men hvis eksempelvis $filename ikke eksisterer, så er variablen blot tom, men problemet er så, at den vil melde fejl, da den ikke kan inkludere en fil, der ikke eksisterer. Jeg kan selvfølgelig bruge die() eller kaste en exception eller lignende hvis filen ikke eksisterer, men jeg vil forsøge at lave scriptet, så der blot ikke sker noget hvis noget ikke fungerer. Altså at der bare ikke bliver udskrevet noget som helst.

Hvordan skal det laves smartest?

<?php
final class View {
    private $filename;
    private $variables = array();

    public function __construct( $filename, $variables = false ) {
        if( file_exists( $filename ) ) {
            $this->filename = $filename;

            if( $variables !== false ) {
                $this->variables = $variables;
            }
        }
    }

    private function render( $filename ) {
        ob_start();
        extract( $this->variables, EXTR_SKIP );
        include( $filename );
        return ob_get_clean();
    }

    public function __toString() {
        return $this->render( $this->filename );
    }
}
?>
Avatar billede jakobdo Ekspert
21. august 2008 - 18:15 #1
Altså du bliver jo nød til at stoppe eksekveringen, eller også tjekke at __construct er gået godt, i de efterfølgende funktionskald.
Avatar billede dkfire Nybegynder
21. august 2008 - 20:18 #2
Eller sætte en default værdi for $filename.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester