首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PHP中自动加载类的最佳方法

PHP中自动加载类的最佳方法

提问于 2018-05-04 00:50:35
回答 2关注 0查看 243

我正在研究一个项目,我有以下文件结构:

代码语言:javascript
运行
AI代码解释
复制
index.php
|---lib
|--|lib|type|class_name.php
|--|lib|size|example_class.php

我想自动加载类,class_name和example_class(与PHP类名称相同),以便在index.php中,类已经实例化,所以我可以这样做:

代码语言:javascript
运行
AI代码解释
复制
$class_name->getPrivateParam('name');

我曾在网上看过,但无法找到正确的答案 - 有人可以帮我解决问题吗?

回答 2

区城轩

发布于 2018-05-04 09:53:47

如果你可以访问命令行,可以在classMap部分的Composer中使用如下内容进行尝试:

代码语言:javascript
运行
AI代码解释
复制
{
    "autoload": {
        "classmap": ["yourpath/", "anotherpath/"]
    }
}

然后,你有一个WordPress插件来启用WordPress cli中的编写器:http://wordpress.org/plugins/Composer/

楼主石乐志

发布于 2018-05-04 09:04:02

如果你需要自动加载类,请使用SPL自动加载的名称空间和类名称约定,这将节省你重新构建的时间。当然,你将需要实例化每个类作为一个对象。

就像这个线程: PHP自动加载名称空间

但是如果你想要一个复杂的解决方法,请看看Symfony的autoload类:https//github.com/symfony/ClassLoader/blob/master/ClassLoader.php

或者像这样(我在我的一个项目中做过):

代码语言:javascript
运行
AI代码解释
复制
<?
spl_autoload_register(function($className)
{
    $namespace=str_replace("\\","/",__NAMESPACE__);
    $className=str_replace("\\","/",$className);
    $class=CORE_PATH."/classes/".(empty($namespace)?"":$namespace."/")."{$className}.class.php";
    include_once($class);
});
?>

然后你可以像这样实例化你的类:

代码语言:javascript
运行
AI代码解释
复制
<?
$example=new NS1\NS2\ExampleClass($exampleConstructParam);
?>

这是你的类(在/NS1/NS2/ExampleClass.class.php中找到):

代码语言:javascript
运行
AI代码解释
复制
<?
namespace NS1\NS2
{
    class Symbols extends \DB\Table
    {
        public function __construct($param)
        {
            echo "hello!";
        }
    }
}
?>
和开发者交流更多问题细节吧,去 写回答
相关文章
PHP中类的自动加载
在之前,我们已经学习过Composer自动加载的原理,其实就是利用了PHP中的类自动加载的特性。在文末有该系列文章的链接。
硬核项目经理
2020/03/12
1.3K0
PHP的类自动加载机制
在PHP开发过程中,如果希望从外部引入一个class,通常会使用include和require方法,去把定义这个class的文件包含进来。这个在小规模开发的时候,没什么大问题。但在大型的开发项目中,这么做会产生大量的require或者include方法调用,这样不因降低效率,而且使得代码难以维护,况且require_once的代价很大。
黄规速
2022/04/14
8270
PHP-自动加载类
在项目开发中,因为一个文件中只能写一个类,并且在执行过程中会有很多的类参与,如果一个一个的加载很麻烦,所以,就需要一个机制实现在PHP执行过程中自动加载需要的类。
cwl_java
2022/11/30
8320
PHP-自动加载类
php-自动加载类
PHP 提供了若干方式来自动加载包含还未加载的类的文件。 老的方法是使用名为 autoload() 魔术全局函数。 然而你一次仅能定义一个 autoload() 函数,因此如果你的程序包含一个也使用了 __autoload() 函数的库,就会发生冲突。 处理这个问题的正确方法是唯一地命名你的自动加载函数,然后使用 spl_autoload_register() 函数来注册它。 该函数允许定义多个 autoload() 这样的函数,因此你不必担心其他代码的 autoload() 函数。 test.php的内容
kdyonly
2023/03/03
8340
有关 php __autoload 自动加载类函数的用法
这个函数是一个自动加载类函数,啥事自动加载函数,顾名思义 ,那就是自己就会加载类的函数(原谅我废话了)
1_bit
2020/10/23
6570
有关 php __autoload 自动加载类函数的用法
PHP 命名空间与类自动加载实现
在 PHP 5.3 之前,要在一个 PHP 脚本中引入另一个 PHP 脚本中定义的代码(通常是函数或者类),需要借助 include、require、include_once、require_once 等语句,include 和 require 都可以通过指定路径引入一个 PHP 脚本,区别是 include 没有找到对应路径脚本时发出警告(E_WARNING),而 require 会抛出致命错误(E_COMPILE_ERROR),include_once/require_once 也是用于引入指定路径 PHP 脚本,与 include/require 的区别是如果指定路径已经包含过,不会再次包含,换言之,只会包含一次同一路径脚本,include_once 和 require_once 的区别与 include/require 一样。
学院君
2020/08/18
1K0
PHP 命名空间与类自动加载实现
PHP命名空间与自动加载类详解
spl_autoload_register() 满足了此类需求。 它实际上创建了 autoload 函数的队列,按定义时的顺序逐个执行。相比之下, __autoload() 只可以定义一次。
用户2323866
2021/07/13
7570
PHP 自动加载
开始的时候, 如果想在一个php文件中使用其它文件的类或方法, 需要通过include/require方法将文件包含进来. 这种方法的缺点也很明显:
烟草的香味
2019/07/25
1.9K0
php自动加载
平时总使用composer,反而对自动加载的知识有些陌生啦,重新梳理下php中自动加载的知识
码缘
2020/07/21
2.1K0
php自动加载
PHP自动加载与composer自动加载
当我们编写面向对象的程序时,通常是将类分别放在不同的文件中。但这样一来,当我们调用其他类的时候,则需要先手动引入该文件(否则会因为当前程序中没有该类名的类而报错)
宣言言言
2019/12/18
2.4K0
PHP自动加载与composer自动加载
当我们编写面向对象的程序时,通常是将类分别放在不同的文件中。但这样一来,当我们调用其他类的时候,则需要先手动引入该文件(否则会因为当前程序中没有该类名的类而报错)
仙士可
2019/12/19
2.1K0
PHP自动加载与composer自动加载
PHP自动加载与composer自动加载
当我们编写面向对象的程序时,通常是将类分别放在不同的文件中。但这样一来,当我们调用其他类的时候,则需要先手动引入该文件(否则会因为当前程序中没有该类名的类而报错)
北溟有鱼QAQ
2019/12/18
2.1K0
PHP的自动加载机制[2]
一、autoload机制概述 在使用PHP的OO模式开发系统时,通常大家习惯上将每个类的实现都存放在一个单独的文件里,这样会很容易实现对类进行复用,同时将来维护时也很便利。这也是OO设计的基本思想之一。在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可。 下面是一个实际的例子:
PM吃瓜
2019/08/13
1K0
介绍PHP的自动加载
include 和 require 是PHP中引入文件的两个基本方法,但是每个脚本的开头,都需要包含(include)一个长长的列表总是不好的,所以 PHP 使用了自动加载器来解决这个问题。
_春华秋实
2018/09/28
1.2K0
介绍PHP的自动加载
点击加载更多

相似问题

在PHP和Javascript之间传输数组的最佳方法?

2211

为SQL Server表自动生成INSERT语句的最佳方法是什么?

2845

使用NSLocalizedString的最佳方法?

2113

在jQuery中删除事件处理程序的最佳方法?

2360

类加载器的加载机制有哪些?

1168
相关问答用户
腾讯云TDP | TDP会员擅长3个领域
平安资管 | 架构师擅长4个领域
擅长5个领域
擅长3个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档