我想做标题中的内容。例如,我包含了我的类的所有文件:
foreach(glob("library/*.php") as $file)
include $file;
之后我定义了所有课程。其中一些具有静态功能,例如 __ initiation 。包括之后如何执行所有这些?像这里的东西:
foreach( {classes} as $class ){
if( function_exists( $class . '::__initiation' ) )
$class::__initiation();
}
我想这样做是因为必须准备一些类(例如数据库连接),而某些类必须使用其他类。通常,在两个方向上(名为 foo 的类必须使用名为 bar 的启动类,而名为 bar 的类必须使用名为 foo的类)。有谁知道怎么做?
例如:
class database{
// some stuff
public static __initiation(){
database::connect();
foo::bar();
}
}
class foo{
// some stuff
public static bar(){/* blah blah blah */}
public static __initiation(){
database::select(/* blah blah blah */);
foo::start();
}
}
// Execute all declared {classname}::__initiation() function right now.
提前感谢您的帮助。
答案 0 :(得分:0)
您将遇到的主要问题是文件是按字母顺序进行的。但是它们之间的依赖关系不是这样的顺序,例如bar引用foo,foo尚未加载,当加载bar时。
您知道__autoload功能吗?这是我的AutoLoader类,可以帮助您:
<?php
namespace de\g667\util;
class AutoLoader
{
/**
* Registers the autoload-function. All needed classes and interfaces will be
* automatically loaded on demand.
*/
static function register() {
spl_autoload_register(
function ($class) {
$class = str_replace ("\\", "/", $class);
$cwd = getcwd();
$filepath = $class.'.php';
$path = PATH . DIRECTORY_SEPARATOR . $filepath;
if( ! file_exists($path) ){
error_log("Autoloading $class failed");
}
require_once $path;
}
);
}
static function setPath($path) {
define("PATH", $path);
}
}
?>
将此代码保存在/library/de/g667/AutoLoader.php
中使用AutoLoader:
<?php
require_once 'library/de/g667/util/AutoLoader.php';
use de\g667\util\AutoLoader;
AutoLoader::setPath("/path/to/library");
AutoLoader::register();
?>
请注意,libraryFolder中的每个类都有一个文件。在AutoLoader中插入实例化函数,然后您应该能够轻松地实例化您的类。