如何在php中动态包含

时间:2011-09-01 03:54:20

标签: php

你好我想在php中动态包含...

我可以将参数发送到我想要的页面,只有页面而不是目录......

尝试如下,但没有奏效:

这是Loadclassphp.php:

<?php
class Loadclass{
public static function load($url)
{   

        foreach($url as $b)
                {
               include "$b.php";
                }


} 
}

?>

这是我打电话的地方:

include_once 'Loadclassphp.php'; 
$arr = array(1 => "menu",2 => "client");
Loadclass::load($arr);

感谢您的帮助...

3 个答案:

答案 0 :(得分:2)

我认为您可以考虑使用自动加载器。请参阅参考:http://au.php.net/manual/en/language.oop5.autoload.php

基本上,您定义了一个特殊的函数,每次加载一个类时都会调用该函数。 在该功能中,您可以定义规则和不包含规则,并包含正确的文件。

然后你需要做的就是做$menu = new $menu($parameters);之类的事情,自动加载器会包含你的文件。

答案 1 :(得分:0)

您的PHP脚本必须位于正确的目录中才能包含您作为数组传递的文件。

因此,如果必须多次为不同目录中的文件调用load,则还必须传递目录。但是,如果所有文件总是驻留在一个目录中(非常糟糕的做法),那么你可以在不传递目录的情况下生活。

这是一种方法,它会自动加载目录中的所有php文件,不需要传递数组......

function load_all( $dir )
{
    foreach ( glob($dir.'/*.php') as $filename )
    {
        include $filename;
    }
}

或者如果您想要包含选择性文件,那么:

function load_all_f( $dir, $files )
{
    foreach ( $files as $filename )
    {
        include $dir.DIRECTORY_SEPARATOR.$filename;
    }
}

希望它对你有所帮助。

答案 2 :(得分:0)

您要加载的代码看起来应该可以正常工作,但是您可能遇到了代码位于错误目录中的路径查找问题。

但是你提到你想要动态包含,这是__autoloadspl_autoload_register已解决的问题:

在这里你

这是我用来在5.3中包含OOP PHP的autoload.inc文件(支持命名空间)。您必须确保您的目录路径结构与您的命名空间名称相匹配(无论您是否使用此自动加载器,都应该这样做。)

<?php

function autoload( $class )
{
  require_once( __DIR__ . DIRECTORY_SEPARATOR . str_replace( '\\', DIRECTORY_SEPARATOR, $class ) . '.inc');
}

spl_autoload_register( 'autoload' );

我使用了require_once,因为它触发了很好的可捕获错误,我可以使用Exceptions转换为set_error_handler;如果您愿意,可以将其更改为requireincludeinclude_once

如果您不想使用.inc文件,可能还需要更改文件后缀。

我发现include('autoload.inc')

少了很少的样板
include('Foo.inc');
include('Bar.inc');
include('Baz.inc');
...etc...