php获取继承类方法吗,php如何获取当前类名,继承中的问题?
木有标题所说的那么简单!!
问题是 :
PHP中 A类继承了B类,如何在A类中获取B类的类名
实际使用状况是:
B类是一个基类,多个类A,C,D.....需要继承B类.我想在B类中写一些日志,来记录A类的运行情况
回复内容:
木有标题所说的那么简单!!
问题是 :
PHP中 A类继承了B类,如何在A类中获取B类的类名
实际使用状况是:
B类是一个基类,多个类A,C,D.....需要继承B类.我想在B类中写一些日志,来记录A类的运行情况
我的方式比较简单,在B类中定义一个属性,B的构造函数里__CLASS__赋值给这个属性,子类里调用这个属性就知道B的类名了。
代码:
class B{
protected $name = '';
public function __construct(){
$this->name = __CLASS__;
}
}
class A extends B{
public function _show(){
echo $this->name;
}
}
$temp = new A();
$temp->_show();
定义一个函数就行了呗。
基类和子类是可以互相调用的。
你在B类(字类)写一个函数:
private function getChildName(){
return __CLASS__;
}
你在A类(基类)调用即可:
$this->getChildName();
多个继承要想在子类获取父类名 1.使用反射 2.使用回调(包括子父类间调用) 3.在父类定义self类方法。
楼主提的问题好像是:
因为A,C,D都是继承的B,但是B里面的函数需要得到「是A,还是C」?
class Base {
public function log() {
// 目标类,输出:A、C
echo static::class;
//echo get_called_class();
//echo get_class($this);
// 基类,输出:Base
//echo __CLASS__;
//echo self::class;
}
}
class A extends Base {}
class C extends Base {}
echo (new A)->log(); // 输出: A
echo (new C)->log(); // 输出: C
如果你的需求是在A里面,得知继承的谁,这可以用到反射了
// 类外获得
$a = new A();
echo get_parent_class($a);
//类中获得
class C extends Base {
public function log1() {
echo get_parent_class($this);
}
}
// 反射,取出所有extends的父级
// 如上,在C类中,$a换成$this即可
$class = new ReflectionClass($a);
$parents = [];
while ($class = $class->getParentClass()) { // 查询 implements 用 getInterfaces
$parents[] = $class->getName();
}
print_r($parents);
> 更多信息,自己看
调试
debug_backtrace
反射
ReflectionClass
函数
get_called_class
get_class
get_class_methods
get_class_vars
get_object_vars
get_parent_class
method_exists
相关标签:php
本文原创发布php中文网,转载请注明出处,感谢您的尊重!
php获取继承类方法吗,php如何获取当前类名,继承中的问题?相关推荐
- Python 中类的继承:属性初始化、类型判断、多态、多继承和对象信息的获取
属性初始化: 一定要用super(Teacher, self).__init__(name, gender)去初始化父类,否则,继承自 Person 的 Teacher 将没有 name 和 gend ...
- Android之打开继承DialogFragment对话框里面EditText获取光标并且弹出键盘把底部布局顶上去
1 需求 打开继承DialogFragment对话框里面EditText获取光标并且弹出键盘把底部布局顶上去 2 效果爆照如下 打开这个DialogFragment 3 关键代码实现 override ...
- Python 学习笔记 类的封装 类的继承 多态继承 类方法和静态方法 单例设计模式
一.类的封装: 1.概念: 广义的封装:函数和类的定义本身,就是封装的体现 狭义的封装:一个类的某些属性,在使用的过程 中,不希望被外界直接访问,而是把这个属性给作为私有的[只有当前类持有],然后暴露 ...
- arduinowifi.send怎么获取响应_ChatterBot代码解读-获取对话
这个过程比较复制,安装处理的流程,依次进行代码解读. 在定义一个ChatBot后,可以进行对话的训练,这个过程参考: 水中的鱼:ChatterBot代码解读-训练数据zhuanlan.zhihu.c ...
- java 获取httpsession_java使用websocket,并且获取HttpSession,源码分析
转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...
- arm shell 获取本地键盘输入值_linux下获取按键响应事件【转】
1.问题 通过一个死循环将读取键盘对应的设备文件将触发键盘事件在屏幕上打印出来,按esc退出程序 代码是在unbuntu10.04编译执行通过的 2.input_event描述 在Linux内核中,i ...
- python获取进程编号(目的、获取当前进程编号、根据编号杀死指定进程号、获取当前父进程编号)
1. 获取进程编号的目的 获取进程编号的目的是验证主进程和子进程的关系,可以得知子进程是由那个主进程创建出来的. 获取进程编号的两种操作 获取当前进程编号 获取当前父进程编号 2. 获 ...
- sqlmap 获取mysql密码_利用sqlmap 获取管理员账号密码
首先,先简单介绍下sqlmap 简介: sqlmap是一种开源的 支持的数据库:MySQL,Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Ac ...
- android开发 获取相册名称_Android开发之获取相册照片和获取拍照照片
在Android的开发过程中,我们可能会读取手机里面的照片或者通过相机拍摄获取照片,这是两种常用的获取图片的方式,在做项目过程中也会经常遇到,下面来介绍一下这两种获取方式.. 1.从本地相册获取照片: ...
最新文章
- Capital one TPS整理
- Class Activation Mapping (CNN可视化) Python示例
- 【LeetCode】172 - Factorial Trailing Zeroes
- 决策树---ID3算法
- 如何解决在每次开机后运行lcm相关命令会提示需要配置IP的问题
- .Net5发布在即,当心技术断层!
- 前端学习(3349):数组方法的运用和数值
- java线程池之一:创建线程池的方法
- 7月发布?华为李昌竹确认Mate 50系列:会来的但不是现在
- python网易云收费_python网易云音乐抓取
- 形式化方法对软件开发的挑战:一些历史与现实
- 向量叉乘公式_大物学习笔记(公式总结)
- JavaWeb学习方法
- 图文安装VMware Workstation教程
- css设置十六进制背景色和透明度
- 360 os3.0 android7.1,360OS 3.0系统
- Linux通过df命令查看显示磁盘空间满,但实际未占用问题
- C专家编程 第6章 运动的诗章:运行时数据结构 6.3 操作系统在a.out文件里干了些什么
- [读书笔记]《程序员代码面试指南》
- Xcode 真机调试失败:Errors were encountered while preparing your device for development
热门文章
- git commit撤销_Git 实用操作:撤销 Commit 提交
- 计算机应用基础教学反思与改进,中职《计算机应用基础》课程教学反思
- Java快速开发平台——JEECG 3.7.8 版本发布!我们的目标是有鱼丸也有粗面
- DXperienceEval-6.2.4 DXperience for MS Visual Studio 2002 2003 破解
- 用CLIP增强视频语言的理解,在VALUE榜单上SOTA!
- NeurIPS 2021 | CyGen:基于概率论理论的生成式建模新模式!
- McGill微软将卷积操作加入到ViT中,捕获更详细的局部信息!准确率达87.7%!代码已开源!...
- 简洁的架构还能高效和准确?清华华为提出新型残差循环超分模型:RRN!
- DAS 2020 Keynote Speech | 深度学习时代的 OCR
- VALSE 2020 线上大会简明日程发布(7月31日-8月5日)