在tp5中使用外部类的时候有三种方法

第一种就是通过composer下载,通过这种方式下载的外部类能够支持自动加载,我们只要在使用的时候use一下命名空间就可以使用了

比如:我们的tp5第四季项目要使用到邮件发送类PHPMailer,这个类我们可以通过composer下载到当前项目,默认会下载到vendor目录

在使用的时候只需在程序文件的开头:use PHPMailer\PHPMailer\PHPMailer;即可使用

第二种方法就是一些我们自己写的类或者是网上搜的类库文件,从composer上面下载不到的,那么我们可以放到extend文件夹中,因为extends中的文件在tp5的结构体系内部,所以要考虑命名空间的问题,这样在调用的时候才能正常使用,比如我们的tp5第四季开发的大型商城项目中,我们将无限极分类文件放到了extend文件夹中,那么就要为这些文件加上命名空间。

如我们的无限极分类类文件放到了extend文件夹下catetree自建的文件夹中,那么该类文件的命名空间就要设置为:namespace catetree;

接着在控制器中使用该类文件的时候我们也要use引入:use catetree\Catetree(类文件的名称);

那么第三种方法就是直接将外部类放到我们项目的跟目录下,比如tp5第四季我们在集成支付宝支付和微信支付的时候,不想考虑太多命名空间的问题就在根路径下创建了一个文件夹pay

之后又在内部创建了两个文件夹alipay和wxpay分别用来存放支付宝和微信的接口文件,但是虽然我们通过这种简单粗暴的方法引入了,但是在使用的时候对于一些新手可能就比较麻烦了,尤其是对命名空间机制不是很熟悉的学员,通常会在控制器中使用的时候提示加载不到类,下面我们以微信支付为例解决一下:

其实就是两个小问题,第一将文件按照正确的路径引入到项目

为了解决这个问题,我们先在index.php入口文件中定义了一个路径常量

define(‘PAY_PLUS’, DIR . ‘/application/../’);

接着在需要微信支付的控制器的方法内部引入微信支付接口文件:

  1. //微信支付
  2. if($orderInfo['payment']==2 && $orderInfo['pay_status']==0){
  3. $payPlus = PAY_PLUS.'./pay/wxpay/';
  4. include($payPlus.'index2.php');
  5. $obj = new \WeiXinPay2();
  6. $qrurl = $obj->getQrUrl('1118');
  7. //2.生成二维码
  8. \QRcode::png($qrurl);
  9. }

如上代码,我们又对入口文件中的路径进行了二次组装,这个是因为我们在微信的其他没有被直接引入到项目中的文件中也要使用该路径,所以定义成为了一个变量:$payPlus

还有第二点要注意的:我们在控制器的方法中如果需要实例化外部引入的类,一定要在类名前面加:\表示跟命名空间即可,如果你是新手没看太懂,那就看看我们的视频教程吧

tp5使用外部类的三种方法的更多相关文章

  1. day42——外键的限制和解决方法、外键的三种约束模式、修改表(单表查询)

    day42 外键的限制和解决方法 可以添加外键关联的那个字段可以是 被唯一(unique)约束的字段 或者 主键 限制:+ 由于外键的使用,致使多个表之间产生了联系,当我们对这些表进行更新或删除操作的 ...

  2. Android监听点击事件实现的三种方法

    监听点击事件实现的三种方法:1.匿名内部类2.外部类3.直接实现接口 1.匿名内部类: package com.jereh.calculator; import android.content.Con ...

  3. 利用Objective-C运行时hook函数的三种方法

    版权声明:转载请注明出处:http://blog.csdn.net/hursing 方法一,hook已有公开头文件的类: 首先写一个Utility函数: #import <objc/runtim ...

  4. linux动态库默认搜索路径设置的三种方法

    众所周知, Linux 动态库的默认搜索路径是 /lib 和 /usr/lib .动态库被创建后,一般都复制到这两个目录中.当程序执行时需要某动态库, 并且该动态库还未加载到内存中,则系统会自动到这两 ...

  5. CSS让图片垂直居中的几种技巧 三种方法介绍

    在网页设计过程中,有时候会希望图片垂直居中的情况.而且,需要垂直居中的图片的高度也不确定,这就会给页面的布局带来一定的挑战.下面总结了一下,曾经使用过的几种方法来使图片垂直居中,除了第一种方法只限于标 ...

  6. RedHat 7.0及CentOS 7.0禁止Ping的三种方法

    作者:荒原之梦 原文链接:http://zhaokaifeng.com/?p=538 前言: "Ping"属于ICMP协议(即"Internet控制报文协议") ...

  7. (转)Java结束线程的三种方法

    背景:面试过程中问到结束线程的方法和线程池shutdown shutdownnow区别以及底层的实现,当时答的并不好. Java结束线程的三种方法 线程属于一次性消耗品,在执行完run()方法之后线程 ...

  8. Ubuntu下三种方法设置环境变量

    一种用于当前终端,一种用于当前用户,一种用于所有用户: 用于当前终端: 在当前终端中输入:export PATH=$PATH:<你的要加入的路径> 不过上面的方法只适用于当前终端,一旦当前 ...

  9. MySQL提供了以下三种方法用于获取数据库对象的元数据

    MySQL提供了以下三种方法用于获取数据库对象的元数据: 1)show语句 2)从INFORMATION_SCHEMA数据库里查询相关表 3)命令行程序,如mysqlshow, mysqldump 用 ...

随机推荐

  1. 2017swpu-ctf总结

    2017swpu-ctf总结 今年是我第一次出题感受很多,就分析几道我印象最深刻的题吧 你能进入后台吗? 这道题主要是考察php_screw还有md5加密开启true过后的注入 phpscrew加密在 ...

  2. Codeforces Round #563 (Div. 2) A. Ehab Fails to Be Thanos

    链接:https://codeforces.com/contest/1174/problem/A 题意: You're given an array aa of length 2n2n. Is it ...

  3. NETCORE MVC模块化

    NETCORE MVC模块化 ASP.NETCORE MVC模块化编程 前言 记得上一篇博客中跟大家分享的是基于ASP.NETMVC5,实际也就是基于NETFRAMEWORK平台实现的这么一个轻量级插 ...

  4. Middleware-请求管道的构成

    Middleware-请求管道的构成 在 ASP.NET 中,我们知道,它有一个面向切面的请求管道,有19个主要的事件构成,能够让我们进行灵活的扩展.通常是在 web.config 中通过注册 Htt ...

  5. 执行ng build --prod --aot命令报错

    D:\git\**\src\main\iui>ng build --prod --aotHash: 257ab60feca43633b6f7Time: 25358mschunk {0} poly ...

  6. AngularJS(八):http服务

    本文也同步发表在我的公众号“我的天空” http服务 之前我们的示例都是在本地获取模拟数据,在实际应用中,所有的项目都将不可避免的从后台获取数据,我们都是通过Ajax来实现与服务器的通信.在Angul ...

  7. typedef int status

    是个自定义类型的语句,typedef用来定义类型的别名,status i 就相当于int i

  8. [Oracle 视图] ALL_OBJECTS

    ALL_OBJECTS ALL_OBJECTS describes all objects accessible to the current user. ALL_OBJECTS描述当前用户的可访问的 ...

  9. optparse 模块

    一.optparse是专门用来在命令行添加选项的一个模块.支持python2.3及以上版本,从2.7版本之后,python不再更新该模块,2.7之后的版本推荐使用argparse模块. 二.optpa ...

  10. Python+selenium之带unittest的脚本分析

    from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.c ...