PHP动态需要

时间:2013-07-18 02:21:59

标签: php require

主要问题仍然是相同的:

这是我的项目

/
| index.php
|-test1
   | test.php

test.php

<?php

echo $variable;


?>

index.php

<?php

$variable = "<br>index";

echo 'test<br>';

$full_path = dirname(__FILE__)."/test1";
$adm_extension = array( "php");

if (is_dir($full_path)) {
    if (($handle = opendir($full_path))) {
        while ($file = readdir($handle)) {
            if (is_file($full_path . '/' . $file)) {
                $item_path = $full_path . '/' . $file;
                $extension = pathinfo($item_path, PATHINFO_EXTENSION);
                    if (in_array($extension, $adm_extension)) {
                        require $item_path;
                    }
            }
        }
    }
}

它的功能就像一个魅力,输出是:

test

index

如果我想在这样的函数中封装此功能:

index1.php

$variable = "<br>index";

echo 'test<br>';

$full_path = dirname(__FILE__)."/test1";
$adm_extension = array( "php" );

function rTest($full_path, $adm_extension){
if (is_dir($full_path)) {
    if (($handle = opendir($full_path))) {
        while ($file = readdir($handle)) {
            if (is_file($full_path . '/' . $file)) {
                $item_path = $full_path . '/' . $file;
                $extension = pathinfo($item_path, PATHINFO_EXTENSION);
                    if (in_array($extension, $adm_extension)) {
                        require $item_path;
                    }
            }
        }
    }
}
}

rTest($full_path, $adm_extension);

我明白了:

( ! ) Notice: Undefined variable: variable in C:\wamp\www\sandbox\test1\test.php on line 3

任何线索??

2 个答案:

答案 0 :(得分:0)

您的脚本在浏览文件时可能会在test.php之前打开index1.php,因此$variable尚未定义

测试它:

function rTest($full_path, $adm_extension){
if (is_dir($full_path)) {
    if (($handle = opendir($full_path))) {
        while ($file = readdir($handle)) {
            if (is_file($full_path . '/' . $file)) {
                $item_path = $full_path . '/' . $file;
                $extension = pathinfo($item_path, PATHINFO_EXTENSION);
                    if (in_array($extension, $adm_extension)) {
                        echo $item_path.'<br />';
                        require $item_path;
                    }
            }
        }
    }
}
}

答案 1 :(得分:0)

好的,朋友帮我解决了。

这是一个非常愚蠢的错误。问题是当我提出要求时,它是在函数范围内完成的。

对于我的解决方案,我做了类似的事情:

function rTest($full_path, $adm_extension){
    $paths = array();
    if (is_dir($full_path)) {
        if (($handle = opendir($full_path))) {
            while ($file = readdir($handle)) {
                if (is_file($full_path . '/' . $file)) {
                    $item_path = $full_path . '/' . $file;
                    $extension = pathinfo($item_path, PATHINFO_EXTENSION);
                        if (in_array($extension, $adm_extension)) {
                             $paths[] = $item_path;
                        }
                }
            }
        }
    }
    return $paths;
}

foreach(rTest($full_path, $adm_extension) as $path){
    require $path;
}