热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php类变量别名,PHP中的类的别名

PHP中函数的别名可能见过不少,比如die()&exit()、join()&implode()等等,类的别名可能听的就不多了。最近就遇到关于类的别名的事

PHP中函数的别名可能见过不少,比如die()&exit()、join()&implode()等等,类的别名可能听的就不多了。最近就遇到关于类的别名的事,折腾了一两天,记录如下。

ThinkPHP中有这么一个配置参数:DEFAULT_C_LAYER,也就是控制器层,可以改变控制器的名称,比如默认的是控制器命名一般是IndexController,定义这个参数假如为Action,那么控制器就变成了IndexAction。当然你不叫Action叫AAA,那控制器名就是IndexAAA。相应的控制器文件夹是也由Controller也跟着变为Action(或AAA)。

其实要说的问题跟这个控制器层参数无关,只是在这个问题里它影响了我的一点判断,再说这个也得知道一下,故也说一说。

正式问题开始,在控制器IndexAction中,代码写了use Action,IndexAction extends Action,Zend Studio编辑器报异常”cannot extends from interface ‘Action'”。纳闷Action是个接口难道?一番寻找,全局搜索,没有找到任何Action.class.php的影子,这个类根本就不存在。不存在怎么能被继承而代码运行正常呢?各种百度谷歌,有说3.2后没有Action了,都是Controller,就没其他了,这压根没有用的答案。群里更惨,根本不人鸟,是看不懂还是根本不想理人,一阵心酸,平常还各种帮人解决问题,轮到自己却没一句安慰。

到TP官网发帖子询问,昨晚发的到今天早上,18个查看0回复,查看好多还是我贡献的,哎。于是开始查看源码看能不能看出点猫腻,明明实例化控制器的时候就是new IndexAction,Action根本就不存在,结果硬硬没有报错,一切正常。它的父类到底是谁?执行new parent操作,报错Cannot instantiate abstract class Think\Controller,我擦,这写的Think\Action,怎么变成Think\Controller了?到另一个框架的群,问题出来就被说”到TP群问,别来这里吵架”,我丢,如今框架之间还斗到这地步了?还好还是有热心人回答的,但大多都不是回答我的问题“Action怎么变Controller”的问题,而是回答抽象类不能实例化、new parent奇葩写法等等,我晕。。。

当然,大神总是有的,也总能在一群无关的回答中写出“有一种叫class_alias的东西”这种闪亮的文字,一开始我还没悟过来,追问如何实现,大神却已不再说话。这时候TP官网上我的帖子也得到官方回应:

8a17aa3c8dfd56048a6454f27949d41d.png

果断再全局搜索“class_alias”,终于得到时答案,在控制器基类Controller.class.php末行,赫然写着:

// 设置控制器别名 便于升级

class_alias('Think\Controller','Think\Action');

再查查手册,原来是这么回事。原来,类也可以设置别名,而且是通过这么个函数。既然都废弃了Action,这代码怎么还这么写,看来我得建议改过来,避免后来人也踩这么个坑。

凡事追究一下,总能学到点什么。感谢所有在这个问题中给予回答的各位网友们!

PS:查看父类的名称,可以通过get_parent_class()这个函数的。



推荐阅读
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • MVC设计模式的介绍和演化过程
    本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • OCI连接MySQL_PLSQL Developer连接远程数据库OCI客户端安装方法
    本文介绍了使用OCI客户端连接MySQL和PLSQL Developer连接远程数据库的安装方法,避免了在本地安装Oracle数据库或类似的开发套件的麻烦,同时解决了PLSQL Dev连接远程Oracle时的配置问题。 ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • 本文总结和分析了JDK核心源码(2)中lang包下的基础知识,包括常用的对象类型包和异常类型包。在对象类型包中,介绍了Object类、String类、StringBuilder类、StringBuffer类和基本元素的包装类。在异常类型包中,介绍了Throwable类、Error类型和Exception类型。这些基础知识对于理解和使用JDK核心源码具有重要意义。 ... [详细]
  • SpringBoot简单日志配置
     在生产环境中,只打印error级别的错误,在测试环境中,可以调成debugapplication.properties文件##默认使用logbacklogging.level.r ... [详细]
  • 【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
    2OpenvSwitch架构2.1OVS整体架构ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-basedswitchin ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
author-avatar
手机用户2702937647
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有