PHP中的自动需求

时间:2014-11-05 10:42:20

标签: php require extends

目标:我希望能够使用extends语句和NO require语句扩展任何php类,如下所示:

<?php

    class some_child extends some_parent{

    }

?>

但目前我必须这样做:

<?php

    require_once("some_parent.php");

    class some_child extends some_parent{

    }

?>

请注意:

  1. 父类与子项目不在同一文件夹中
  2. php.ini已正确设置为包含父级的路径......所以没关系。
  3. 问题 我如何实现这一点,即扩展父类而不需要它?

    如果这有点不具有建设性,我提前道歉,我从来不知道这里的规则。 TIA

    修改

    只是为了更清楚,我正在寻找一个&#34;在幕后&#34;解决方案,希望我可以在htaccess或php.ini中设置一些东西,不仅包括必要的文件,还加载它们,对我来说似乎include_path不加载该目录中的类。这就是我得到致命错误的原因

    最后,如果我之前没有看过它,我不会提出这个问题。我知道它可能,只是寻找一些指导。谢谢,谢谢

3 个答案:

答案 0 :(得分:3)

这是我能给你看的最简单的版本:

function __autoload($className) { 
      if (file_exists($className . '.php')) { 
          require_once $className . '.php'; 
      } 
      return false; 
}

您需要将您的目录结构纳入您的帐户,以确保正确加载文件。

因此,如果您有一个名为helpers的目录和一个名为libraries的目录,它可能如下所示:

function __autoload($className) {

   $directories = array('helpers', 'libraries');

   foreach ($directories as $dir) {
      $path = '/'.$dir.'/'$className . '.php';
      if (file_exists($path)) { 
          require_once $path; 
      }
   } 
}

答案 1 :(得分:0)

所以......是的,回答我自己的问题......这完全符合我的需求:

所以我发现你可以设置一个php指令,它会自动添加和/或将一些php文件附加到你访问的每个php文件中......

这就是我所做的:

在php.ini中

auto_prepend_file =“require.php”

require.php包含我所有的require_once语句......

完全满足我的需求:)感谢以前的答案。

答案 2 :(得分:-2)

执行此操作的最佳方法我认为需要索引中的所有文件,然后运行核心对象。 像这样:

require_once ("config/config.php");
require_once ("config/application_config.php");
require_once ("config/database.php");

require_once ("system/systemcomponent.php");
require_once ("system/program.php");


$program = new Program ();
$program->run ();

然后你可以让你的程序对象做你想要程序做的任何事情! 在延长之前不必担心需要任何东西。

更新:

你也可以这样做。

//get all files in the root directory
$php_files = scandir ("./");

    //take out the "." and ".." directories (used for navigating)
    for ($i = 0; $i <= 2; $i++) 
        array_splice ($php_files, 0, 1);

    //Require all found files
    foreach ($php_files as $file)
        require_once ($file);

请注意,它并没有吞噬非.php文件。