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

php类这样写多余么?

{代码...}经常遇到这样类定义之后,在其他地方没有实例化也没有调用(全局搜索找不到类test或者函数aaa)。既然没有用到的地方为什么要定义呢?定义了,如果有用到的话是哪里调用的?
class test{
    function aaa(){
        echo "多余么";
    }
}

经常遇到这样类定义之后,在其他地方没有实例化也没有调用(全局搜索找不到类test或者函数aaa)。
既然没有用到的地方为什么要定义呢?
定义了,如果有用到的话是哪里调用的?

回复内容:

class test{
    function aaa(){
        echo "多余么";
    }
}

经常遇到这样类定义之后,在其他地方没有实例化也没有调用(全局搜索找不到类test或者函数aaa)。
既然没有用到的地方为什么要定义呢?
定义了,如果有用到的话是哪里调用的?

类调用一定要new吗,调用方法一定要显性写出来方法名?

可能是动态调用,可能是回调,这些都是隐形的调用。

test类的话,更可能是测试类,在项目中不会使用,供开发人员测试的。

php是支持反射的好嘛,就是允许运行时动态提供类名、函数名来装载和调用相关类方法的好嘛~
作为动态语言,类名完全可以取自用户输入之类的,然后动态加载,干嘛写代码里?
比如你弄个插件系统,名为xxx的插件就放在/plugin/xxx/xxx.php,然后插件的类名就叫xxx,拥有一个方法叫init,所以代码里写的就是类似:

$a=获取plugin目录下的文件夹名称列表();
foreach($a as $i){
    $file="/plugin/$i/$i.php";
    if(file_exists($file)) include($file);else{...}
    if(class_exists($i)) $t=new $i();else{...}
    if(method_exists($t,'init')) $t->init();else{...}
}

这样就完成了全部插件的载入并初始化,可是源代码中完全没有出现xxx这个字符串,不就是这么个道理么。

@MrGeneral 的答案很赞,php 有反射
补充一点,一种可能是历史遗留代码,在过去的代码中会使用这段代码,但是重构(修改代码使用)之后,就不使用一些旧代码了,也没人删除掉,就这么一直留着。

存在即合理。

我想有可能 在你用的框架中使用的是 call_user_func 调用的。

全局搜索没有,不代表这个没被用到啊.
你要是不很确定可以尝试注释掉先,不过根据以往经验,建议别做没用的事儿,如果这个类或者函数仅仅是没用,那么它并不占什么资源,最多你注释下这东西可能没用就好了.
千万别删代码,千万别删代码,千万别...

你在__construct()里面写上 echo '调用?';exit;

然后看看程序跑起来的样子(当然有可能并不是在启动中被调用,而是在某一个很猥琐的角落特定的环境情境下中才调用)

xdebug断点也是一样的道理。

可能是final类

测试代码

$class = $_GET['name'];
// $class = 'test';
$method = $_GET['method'];
// $method = 'aaa';

$myclass = new $class();
$myclass->$method();

/**
 *定义tst类
 */
class test
{

    function aaa()
    {
        echo __CLASS__."->".__METHOD__.PHP_EOL;
    }
}

通过浏览器访问:

http://hostname/seg.php?name=test&method=aaa

这里命名不规范,只是为了说明问题。
实例化的过程这个实现方式你就看不到。

如果是注入式框架的话,类没有找到被调用的地方也是正常的

推荐阅读
  • 本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 乐山市计算机学校2017—2018学年度第一学期开学典礼隆重举行
    乐山市计算机学校于2017—2018学年度第一学期举行了隆重的开学典礼,全体教职工和学生参加了此次典礼。乐山市计算机学校自建校以来一直秉承着追求崇高、抓住机遇、回报社会的办学宗旨,取得了累累硕果。在典礼上,常务副校长梁志明发表了致辞,鼓励全体新生用自己的智慧和勤奋去创造优秀的业绩。同时,苏稽镇派出所所长、市计算机学校法制副校长邹学斌提出了关于遵守法律法规和社会公共道德规范、树立自尊、自律、自强意识以及相信和依靠法律的建议,以维护校园秩序的平安和谐。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 本文详细介绍了Mybatis中#与$的区别及其作用。#{}可以防止sql注入,拼装sql时会自动添加单引号,适用于单个简单类型的形参。${}则将拿到的值直接拼装进sql,可能会产生sql注入问题,需要手动添加单引号,适用于动态传入表名或字段名。#{}可以实现preparedStatement向占位符中设置值,自动进行类型转换,有效防止sql注入,提高系统安全性。 ... [详细]
  • 本文介绍了在go语言中利用(*interface{})(nil)传递参数类型的原理及应用。通过分析Martini框架中的injector类型的声明,解释了values映射表的作用以及parent Injector的含义。同时,讨论了该技术在实际开发中的应用场景。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 双极型晶体管的制造工艺及应用
    本文介绍了双极型晶体管作为最早发明的半导体器件,在集成电路生产中的重要地位。双极型工艺凭借其高速、高跨导、低噪声以及较高的电流驱动能力等优势,得到了快速发展。文章详细介绍了双极型晶体管的基本元素、隔离工艺以及制作工艺流程。隔离技术包括pn结隔离、全介质隔离以及pn结-介质混合隔离等。制造工艺流程包括衬底选择、光刻、扩散、氧化等步骤。本文可作为双极型晶体管制造工艺及应用的参考资料。 ... [详细]
  • Kali Linux 简介
    KaliLinux是世界渗透测试行业公认的优秀的网络安全审计工具集合,它可以通过对设备的探测来审计其安全性,而且功能完备,几乎包含了目前所 ... [详细]
  • 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之六 || API项目整体搭建 6.1 仓储模式
    代码已上传Github+Gitee,文末有地址  书接上文:前几回文章中,我们花了三天的时间简单了解了下接口文档Swagger框架,已经完全解放了我们的以前的Word说明文档,并且可以在线进行调 ... [详细]
author-avatar
xujian6561
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有