【问题标题】:How we load all classes that placed in different directory in one PHP File我们如何在一个 PHP 文件中加载放置在不同目录中的所有类
【发布时间】:2017-11-01 02:32:16
【问题描述】:

我们如何将放置在不同目录中的所有类加载到一个 PHP 文件中, 表示如何自动加载类

【问题讨论】:

  • 这已经被广泛记录in PHP's docs
  • 这和 CSS 有什么关系?

标签: php css class


【解决方案1】:

你可以使用ps4和composer autoloader:https://getcomposer.org/doc/01-basic-usage.md#autoloading

composer.json:

{
    "autoload": {
        "psr-4": {"My_Name_Space\\": "My_Folder/"}
    }
}

然后运行

composer dump-autoload

【讨论】:

  • <?php spl_autoload_register(function ($class_name) { include $class_name . '.php'; }); $obj = new MyClass1(); $obj2 = new MyClass2(); ?> 我们可以这样加载类吗?
  • 感谢您的帮助... :)
  • 是的,您可以简单地使用函数 spl_autoload_register() 来自动加载类
  • 好的,谢谢先生帮助我。 :)
【解决方案2】:

您应该为类命名,以便下划线 (_) 转换为目录分隔符 (/)。一些 PHP 框架可以做到这一点,例如 Zend 和 Kohana。

所以,你将你的类命名为 Model_Article 并将文件放在 classes/model/article.php 中,然后你的自动加载就会...

function __autoload($class_name) 
{
    $filename = str_replace('_', DIRECTORY_SEPARATOR, strtolower($class_name)).'.php';

    $file = AP_SITE.$filename;

    if ( ! file_exists($file))
    {
        return FALSE;
    }
    include $file;
}

示例取自Autoload classes from different folders

Edit#1 未测试

spl_autoload_register(function ($class_name) { 

     $filename = str_replace('_', DIRECTORY_SEPARATOR, strtolower($class_name)).'.php';

    $file = AP_SITE.$filename;

    if ( ! file_exists($file))
    {
        return FALSE;
    }
    include $file;
      }); 

【讨论】:

  • <?php spl_autoload_register(function ($class_name) { include $class_name . '.php'; }); $obj = new MyClass1(); $obj2 = new MyClass2(); ?> 我们可以这样加载类吗?
  • 另请注意,您可以使用 spl_autoload_register() 使任何函数成为自动加载函数。它也更灵活,允许您定义多个自动加载类型的函数。请参考链接
  • 好的,谢谢您的帮助... :)
  • 是的,我看到了。谢谢你的帮助先生。 :)
猜你喜欢
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
  • 2019-06-07
  • 2017-08-03
  • 1970-01-01
  • 2018-12-26
相关资源
最近更新 更多