PHP
patriot_28
这个作者很懒,什么都没留下…
展开
-
CentOS下安装pdf转图片的imagick扩展,附示例
sudo yum -y install ImageMagicksudo yum -y install ImageMagick-develsudo yum -y install ghostscriptsudo wget http://pecl.php.net/get/imagick-3.4.3.tgzsudo pecl install imagick-3.4.3.tgz #imagick-3.4.3.tgz是下载后的压缩包在php.ini添加 extension=imagick.so关键代码.原创 2021-02-21 15:56:51 · 260 阅读 · 0 评论 -
PHP项目开发经验整理
遵守PSR规范,详细参考Accepted部分以数据表为单位设计“微服务”,详细参考为了维护方便,同一模块对接不同平台的情况下(处理逻辑有不一样的地方)按平台名称(建议使用拼音首字母缩写)划分文件夹,如需要对两个渠道A和B的订单进行处理,则处理的分别为路径为A/OrderService.php、B/OrderService.php,避免在一个OrderService.php里面使用两个方法 public function generateOrderA($params)、 public function .原创 2020-11-12 20:32:53 · 454 阅读 · 0 评论 -
PHP扩展开发之工作原理和生命周期
PHP的核心架构图,PHP的生命周期,PHP扩展框架示例,PHP内核中的变量原创 2020-11-17 06:38:43 · 184 阅读 · 0 评论 -
PHP学习中比较少注意到的地方
php-dev是用来开发PHP扩展的包,如果php源码中没有phpize,可以安装对应版本的php-dev包sapi(server abstraction api,服务器抽象化程序接口)提供一个接口,使得php可以和其他应用进行数据交互,php能跟其他程序(如apache)交互,就是这个接口起的作用...原创 2020-11-17 00:23:25 · 130 阅读 · 0 评论 -
laravel框架中防止伪造IP或使用代理IP进行curl攻击的代码示例
use Illuminate\Support\Facades\Cache;/*** $throttle, set defaut value to be 5 for test*/ function guardShortMsgAttack($throttle){ $HTTP_X_FORWARDED_FOR=isset($_SERVER["HTTP_X_FORWARDED_FOR"])?$_SERVER["HTTP_X_FORWARDED_FOR"]:null; $seconds=6原创 2020-10-16 00:42:12 · 407 阅读 · 0 评论 -
一致性hash算法,PHP示例
直接给代码:class FlexiHash{ private $servers = []; private $is_sorted = false; private $server_total=0; // 新增服务器时 public function addServer($server) { $server_pos = $this->mHash($server); if(!isset($this->servers[$server_pos])){ $this->原创 2020-10-12 00:29:49 · 62 阅读 · 0 评论 -
PHP扩展开发之简单介绍及示例(基于php7.4)
为什么要开发PHP扩展为了从底层提高应用效率PHP无法直接访问,需要从底层进行调用避免暴露商业源码PHP源代码目录介绍源代码根目录:CODING_STANDARDS.mdUPGRADINGbuildconf.batphp.ini-productionCONTRIBUTING.mdUPGRADING.INTERNALSconfigurerun-tests.phpEXTENSIONSZend #包含Zend引擎的所有文件。在这里可以找到所有的Zend Api定义和宏等原创 2020-10-11 13:41:56 · 318 阅读 · 0 评论 -
简单明了地说明如何设计版本格式和版本号
版本号设计如下:版本格式:主版本号。次版本号。修订号,版本号递增规则如下:主版本号:当你做了不兼容的 API 修改,次版本号:当你做了向下兼容的功能性新增,修订号:当你做了向下兼容的问题修正。先行版本号及版本编译信息可以加到 “主版本号。次版本号。修订号” 的后面,作为延伸。简单介绍就是,如果你现在的最新版本是 1.0.0,下面的动作的区别是:打补丁,修了一些小 bug,没做 API 修改,那么你应该发布 1.0.1,同理以后也是递增第三位。有一天网友在你的基础上提交了新功能,原来的 API原创 2020-09-30 13:26:40 · 1467 阅读 · 0 评论 -
在laravel中创建Events和Listeners,It‘s really easy!仅需3步
简介Laravel 的事件提供了一个简单的观察者实现,允许你在应用中订阅和监听各种发生的事件。事件类通常放在 app/Events 目录下,而这些事件类的监听器则放在 app/Listeners 目录下。如果在你的应用中你没有看到这些目录,不用担心,它们会在你使用 Artisan 控制台命令生成事件与监听器的时候自动创建。– learnku.com事件是分离应用程序各个方面的好方法,因为单个事件可以有多个相互不依赖的侦听器。例如,你可能希望在用户下单支付完成后向其发送下单成功的通知,还可以发送所购原创 2020-09-29 19:35:06 · 470 阅读 · 0 评论 -
用动态代理实现AOP切面编程,PHP代码演示
代码:<?phpclass DynamicProxy{ private $obj; private $regPrePosts=[]; public function __construct($obj) { $this->regPrePosts=[]; $this->obj=$obj; } public function registerPrePost($type, $obj) { if('pre'==$type){ $this->regP原创 2020-09-20 10:19:31 · 179 阅读 · 0 评论 -
访问者模式(Visitor Pattern)- PHP示例
访问者模式(Visitor Pattern)在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。意图:主要将数据结构与数据操作分离。主要解决:稳定的数据结构和易变的操作耦合问题。何时使用:需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些原创 2020-09-05 22:58:12 · 121 阅读 · 0 评论 -
模板模式(Template Pattern) - PHP示例
模板模式(Template Pattern)在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。主要解决:一些方法通用,却在每一个子类都重新写了这一方法。何时使用:有一些通用的方法。如何解决:将这些通用算法抽象原创 2020-09-05 22:42:46 · 132 阅读 · 0 评论 -
策略模式(Strategy Pattern)-PHP示例
策略模式(Strategy Pattern)在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。何时使用:一个系统有许多许多类,而区分原创 2020-09-05 22:38:48 · 97 阅读 · 0 评论 -
空对象模式(Null Object Pattern) - PHP示例
空对象模式(Null Object Pattern)在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方。示例代码:<?phpabstract class Abstra原创 2020-09-04 23:12:23 · 168 阅读 · 1 评论 -
状态模式(State Pattern)- PHP示例
状态模式(State Pattern)在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。意图:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。主要解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。何时使用:代码中包含大量与对象状态有关的条件语句。如何解决:将各种具体的状态原创 2020-09-04 23:09:28 · 91 阅读 · 0 评论 -
备忘录模式(Memento Pattern)- PHP示例
备忘录模式(Memento Pattern)备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。何时使用:很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状原创 2020-09-04 22:48:16 · 120 阅读 · 0 评论 -
中介者模式(Mediator Pattern)-PHP示例
中介者模式(Mediator Pattern)中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。意图:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之原创 2020-09-03 22:21:55 · 100 阅读 · 0 评论 -
迭代器模式(Iterator Pattern)-PHP示例
迭代器模式(Iterator Pattern)迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。主要解决:不同的方式来遍历整个整合对象。何时使用:遍历一个聚合对象。如何解决:把在元素之间游走的责任交给迭代器,而不是聚合对象。关键代码:定义接口:hasNext, next。原创 2020-09-03 22:14:40 · 85 阅读 · 0 评论 -
解释器模式(Interpreter Pattern)-php示例
解释器模式(Interpreter Pattern)解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL解析、符号处理引擎等。意图:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。主要解决:对于一些固定文法构建一个解释句子的解释器。何时使用:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表原创 2020-09-03 22:05:24 · 124 阅读 · 0 评论 -
命令模式(Command Pattern)-PHP示例
命令模式(Command Pattern)命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太原创 2020-09-02 19:16:45 · 169 阅读 · 0 评论 -
责任链模式(Chain of Responsibility Pattern)-PHP示例
责任链模式(Chain of Responsibility Pattern)顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。意图:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一原创 2020-09-02 19:08:07 · 99 阅读 · 0 评论 -
观察者模式(Observer Pattern)-PHP 示例
观察者模式(Observer Pattern)意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。如何解决:使用面向对象技术,可以将这种依赖关系弱化。关键代码:在抽象类里有一个 ArrayList 存放观察者们。优点:1、观原创 2020-09-02 19:01:37 · 116 阅读 · 0 评论 -
MVC模式-PHP示例
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。Model(模型) - 模型代表一个存取数据的对象。它也可以带有逻辑,在数据变化时更新控制器。View(视图) - 视图代表模型包含的数据的可视化。Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。Model:class Student{ private $stuNo; private原创 2020-08-31 23:01:53 · 97 阅读 · 0 评论 -
享元模式(Flyweight Pattern)-PHP示例
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。意图:运用共享技术有效地支持大量细粒度的对象。主要解决:在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。何时使用: 1、系统中有大量对象。 2、这些对象消耗大量内存。 3、这些对象的状态大部分可以外部化。 4、这些对象可以原创 2020-08-31 22:41:31 · 75 阅读 · 0 评论 -
外观模式(Facade Pattern)-PHP示例
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。何时使用: 1、客户端不需要知道系统原创 2020-08-31 22:35:00 · 94 阅读 · 0 评论 -
组合模式(Composite Pattern)-PHP示例
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。意图:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单原创 2020-08-31 22:18:48 · 206 阅读 · 0 评论 -
过滤器模式(Filter Pattern)-PHP实现
过滤器模式(Filter Pattern)/标准模式(Criteria Pattern)过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。这是对符合条件的对象进行过滤,不是简单的对传递的参数进行判断。示例代码:<?phpclass User{ private $gender='male原创 2020-08-30 20:34:22 · 147 阅读 · 0 评论 -
桥接模式(Bridge Pattern)-PHP实现
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。意图:将抽象部分与实现部分分离,使它们都可以独立的变化。主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。何时使用:实现系统可能有多个角度分类,每一种角度都可能变化。如何解决:把这种多角度分类分离出来,让原创 2020-08-30 20:05:55 · 89 阅读 · 0 评论 -
适配器模式(Adapter Pattern)-PHP实现
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。意图:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。主要解决:主要解决在软件系统中,常常要将原创 2020-08-29 21:21:51 · 101 阅读 · 0 评论 -
装饰器模式(Decorator Pattern)-PHP实现
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。主要解决:一般的,我们为了扩展一个类经常使用原创 2020-08-29 21:07:59 · 166 阅读 · 0 评论 -
代理模式(Proxy Pattern)-PHP实现
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。意图:为其他对象提供一种代理以控制对这个对象的访问。主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层原创 2020-08-29 20:53:45 · 154 阅读 · 0 评论 -
原型模式(Prototype Pattern)- PHP示例
原型模式(Prototype Pattern)原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。意图:用原型实例指定创建对象的种类,并且通过拷贝这原创 2020-08-26 23:56:56 · 185 阅读 · 0 评论 -
建造者模式(Builder Pattern)- PHP示例
建造者模式(Builder Pattern)建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变原创 2020-08-26 23:36:36 · 122 阅读 · 0 评论 -
Laravel框架关键技术
PHP新特性相关命名空间 namespace类的自动加载 spl_autoload_register匿名函数 Anonymous functions,也叫 闭包 Closure魔术常量和魔术方法反射 ReflectionClass后期静态绑定 static::trait主要设计模式工厂模式:服务容器依赖注入:服务容器装饰者模式 Decorator:管道、中间件观察者模式 Observer:事件、队列门面模式 Facade核心架构服务容器服务提供器Facades契原创 2020-08-26 23:25:09 · 202 阅读 · 0 评论 -
抽象工厂模式(Abstract Factory Pattern)- PHP示例
抽象工厂模式(Abstract Factory Pattern)抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。主要解决:主要解决接口选择的问题。何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。如何解决:在一个产品族里面,定义多个产品。关键代码:在一个工厂里聚合多个同类产品。优点:当一个产品原创 2020-08-26 00:30:00 · 86 阅读 · 0 评论 -
工厂模式(Factory Pattern)- PHP示例
工厂模式(Factory Pattern)工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。主要解决:主要解决接口选择的问题。何时使用:我们明确地计划不同条件下创建不同实例时。如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。关键代码:创建过程在其子类执行。优点:1、一个调用者想创建一个对象,只要知道其名称就可以了。2、扩展性高原创 2020-08-26 00:21:53 · 123 阅读 · 0 评论 -
单例模式(Singleton Pattern)- php、js、Java 实现
单例模式(Singleton Pattern)单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。主要解决:一个全局使用的类频繁地创建与销毁。何时使用:当您想控制实例数目,节省系统资源的时候。如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。关键代码:构造函数是私有的。优点:1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例。2、避免对资原创 2020-08-23 20:56:12 · 105 阅读 · 0 评论 -
PHP中的几个用法比较整理
isset/empty/is_null对比项isset()方法empty()方法is_null方法“”(空字符串)truetruefalse" "(一个空格)truefalsefalseFALSEtruetruefalseTRUEtruefalsefalsearray()(一个空数组)truetruefalseNULLfalsetruetrue“0”(字符串0)truetruefalse0(整型0)原创 2020-08-10 08:57:19 · 94 阅读 · 0 评论 -
几种php扩展安装方法
扩展文件已存在直接去掉扩展前面的分号:";extension=mysqli"=>“extension=mysqli”pecl方式安装以安装mongodb扩展为例。pecl-The PHP Extension Community Library运行命令:/usr/local/bin/pecl install mongodb,根据提示解决安装中出现的问题在php.ini中添加配置:extension=“mongodb.so”phpize方式安装以安装redis扩展为例。phpize是一个运行原创 2020-06-02 18:26:39 · 295 阅读 · 0 评论 -
PHP异常处理总结
异常处理的场景避免在项目中充斥if…else,提高代码的可读性。异常处理可以强迫开发人员消除问题,或者把问题交给能解决它的环境。把“描述在正常过程中做什么事的代码“跟”出了问题怎么办的代码“进行隔离PHP异常处理的特点【注】很多时候不是直接写上try…catch就万事大吉了。PHP一旦遇到非正常代码通常都会出发错误,而不是异常。这个意义上,如果想使用异常处理不可预料的问题是办不到的,如文件不存在、数据库连接不上,这在PHP里把它作为错误抛出,而不是作为异常自动捕获。PHP一般需要主动th原创 2020-06-01 10:57:16 · 226 阅读 · 0 评论