第三方类

FastAdmin应用插件开发过程中经常需要引用于第三方的类,此时可以采用以下两种方式进行引入。

edPZmyUxnSRrOwoMVlAGo5L82JF+rw4RcRjd/A==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

手动修改文件命名空间

zxFjAyqwinISrmPRQcZ2KVnG8GQEsrl+EH0/Dg==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

如果我们引入的第三方类文件比较少,我们可以采取手动修改文件命名空间的办法。例如我们需要引入HashMap.php这个类,这个类功能比较单一,只有一个文件,此时我们可以将HashMap.php文件放在addons/mydemo/library目录下,然后再修改HashMap.php中的namespace,修改为

ECxrUGRuYjJdPoFyGp8m5yMPco6irjMQQLt2sA==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
<?php

namespace addons\mydemo\library;

class HashMap
{
    //普通方法
    public function myNormalMethod(){
    
    }
    
    //静态方法
    public static function myStaticMethod(){
    
    }
}
QiPKbtlnxENuFaZRAlIXJxMBDHOZOI6XwXAhLg==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

其中mydemo为你的插件目录名。
通过以上修改后,我们在我们的服务端任何位置均可使用

BCZtxgbmkGMRFYqvcy8e+JS719dTW+WCkP+jbQ==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
$hashMap = new \addons\mydemo\library\HaspMap();
$result = $hashMap->myNormalMethod();
edHgMZzNDTuqvjGFEMhfs1Bz1R3kor5aHd2/Kw==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

来实例化我们的类,静态方法可以通过

jxBiWNlJPtQvgsAD5QTvRSnTQ8RuPC2Otsfp8Q==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
$result = \addons\mydemo\library\HashMap::myStaticMethod();
YWgxvwRsTdSDtOGbXDJok4iEcDfunWh1PYKU1w==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

其中myNormalMethodHaspMap的公共方法,myStaticMethodHashMap的静态方法。

QiTNqMBIxWVShYln1qDjHqKXKqFd1hCBqu8myw==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

通过行为载入命名空间

YXhcQNbJKUCijDWAgNGmX3j0C+YW6yPQiOUNjw==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

如果我们引入的第三方类是一个composer包,或者说这个类已经使用了命名空间,如果手动修改类的命名空间工作量过大时,我们可以通过在行为中载入命名空间。

xOszVaXBjuenvlptKqiFLEM34uUjLCAJ84Xe7g==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

比如我们需要引入https://gitee.com/yansongda/pay这个微信支付库处理类。
首先我们下载这个源码包,把源码包中的src中的代码拷贝到addons/mydemo/library/Yansongda这个目录下,如图:
image.png

uIaWHpmRqnwiLZQVdTq8jHrI9HFMp6cR/N9FHQ==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

首先我们在addons/mydemo/Mydemo.php中新增一个

ENDUGVbexZvQYzcmJg9UpFrzdcdTZB7+MmiqtQ==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
/**
 * 应用初始化
 */
public function appInit()
{
    //先判断是否已经通过其它方式引入了此类
    if(!class_exists("\Yansongda\Pay\Pay")){
        \think\Loader::addNamespace('Yansongda\Pay', ADDON_PATH . 'mydemo' . DS . 'library' . DS . 'Yansongda' . DS);
    }
}
VcIRBsSrOgvaYLhkxkT5Rh3ebJdo/fVNhWR4Zg==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

如图:
image.png

BhjgZsdCPmFVXAtvILNPjGcSnaOGTVJlxR1Z6A==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

最后我们再到后台管理右上角清下缓存即可。

UkdSMBimQnhybIpcLxe0zymuBwRO6+oSXVYmPQ==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

我们在通过行为载入命名空间时务必检查下第三方类的命名空间使用的名称。比如我们打开Pay.php这个文件可以看到它的头部使用的命名空间是Yansongda\Pay,如图:
image.png
因此我们在使用\think\Loader::addNamespace导入命名空间时的第一个参数要写Yansongda\Pay,如果命名空间导入不正确,后续都将不能正确的引入。

FCsDMqXoAHbxGLEgxnZL/jNCWSJNC2I3zntdxw==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

类的使用方法和上方手动引入类的使用方法一致。

WFXjIkuQbqSYcpigNDKYUWqX1HaM+kvHtmZRsQ==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

常见问题

FBMmxDEiZayzsrLHv85XQRzZZ3y/s87GwaDhFw==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  1. 如果在引用时出现类未找到,请检查类的命名空间是否正确,其次请检查目录、文件、类名大小写是否正确。
  2. spSLYuUDlzretXnB64jPV9Dq6biRWvWCf71szg==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  3. 插件开发引用类,请全部使用命名空间的方法,请勿使用requireinclude进行载入。
  4. saGcfkHhyTXCoYiq0/3TiWCuAdYXdbcXffqZ+A==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
文档最后更新时间:2024-07-26 09:53:57
著作权归应用插件开发者所有,未经许可,禁止转载、复制此文档的任何内容。

文档
目录

深色
模式

切换
宽度