php访问父类的所有属性,php – 在父类中使用$this仅在子类中显示父类属性
我有以下两个班级. BMW级延伸级轿车.
class Car{
public $doors;
public $wheels;
public $color;
public $size;
public function print_this(){
print_r($this);
}
}
class BMW extends Car{
public $company;
public $modal;
public function __construct(){
print_r(parent::print_this());
}
}
$bmw = new BMW();
$bmw->print_this();
在上面的代码中,当我使用parent :: print_this()和内部print_this()方法从构造函数访问父类方法时,我有print_r($this),它打印所有属性(父类和子类属性)
现在我想要print_r(parent :: print_this());应该只输出子类中的父类属性?谁可以帮我这个事?
最佳答案 您可以使用
reflection实现此目的:
class Car{
public $doors;
public $wheels;
public $color;
public $size;
public function print_this(){
$class = new ReflectionClass(self::class); //::class works since PHP 5.5+
// gives only this classe's properties, even when called from a child:
print_r($class->getProperties());
}
}
您甚至可以从子类反映到父类:
class BMW extends Car{
public $company;
public $modal;
public function __construct(){
$class = new ReflectionClass(self::class);
$parent = $class->getParentClass();
print_r($parent->getProperties());
}
}
编辑:
what actually I want that whenever I access print_this() method using object of class BMW it should print BMW class properties only and when I access print_this() from BMW class using parent it should print only parent class properties.
有两种方法可以使相同的方法表现不同:在子类中重写它或者将其重载/传递给它.因为重写它会意味着很多代码重复(你必须在每个子类中基本相同)我建议你在父Car类上构建print_this()方法,如下所示:
public function print_this($reflectSelf = false) {
// make use of the late static binding goodness
$reflectionClass = $reflectSelf ? self::class : get_called_class();
$class = new ReflectionClass($reflectionClass);
// filter only the calling class properties
$properties = array_filter(
$class->getProperties(),
function($property) use($class) {
return $property->getDeclaringClass()->getName() == $class->getName();
});
print_r($properties);
}
现在,如果您明确要从子类打印父类属性,只需将标志传递给print_this()函数:
class BMW extends Car{
public $company;
public $modal;
public function __construct(){
parent::print_this(); // get only this classe's properties
parent::print_this(true); // get only the parent classe's properties
}
}
php访问父类的所有属性,php – 在父类中使用$this仅在子类中显示父类属性相关推荐
- java子类访问父类私有成员_Java中子类可以继承父类的私有成员,但是不能(直接)访问!!!...
今天学习Java三大特征之一:继承的时候,产生了一些疑问,最后通过网上查找和各位网友的帮助,终于拔开云雾见日出.下面进入正题: 首先:子类对象拥有父类中的所有属性和方法:在这里,很多人会问构造器可以继 ...
- 子类super调用父类函数,该函数中调用的函数是父类还子类呢
如图所示: 子类对象通过super()函数调用父类的run函数,然后直接调用了子类的demo函数,而没有调用父类的函数:猜想通过super调用父类,但self仍然代表是子类本身: 再看一例: 从这里说 ...
- 在子类中调用父类的方法super
1.没有super之前,在子类里面需要父类里面的逻辑,但是我们是通过派生(自己定义了一个init,增加了一条line) class vehichle:#定义一个交通工具的类Country=" ...
- 继承实现的原理、子类中调用父类的方法、封装
一.继承实现的原来 1.继承顺序 Python的类可以继承多个类.继承多个类的时候,其属性的寻找的方法有两种,分别是深度优先和广度优先. 如下的结构,新式类和经典类的属性查找顺序都一致.顺序为D--- ...
- 在java继承机制中 父类中的私有_Java中子类能继承父类的私有属性吗?
前段时间去听老师讲课的时候,老师告诉我子类是可以继承父类所有的属性和方法的.当时我是极其疑惑的,因为之前学校考试时这个考点我记得很清楚:子类只能继承父类的非私有属性和方法.老师给我的解释是这样的--先 ...
- Day19:继承实现的原理、子类中调用父类的方法、封装
一.继承实现的原来 1.继承顺序 Python的类可以继承多个类.继承多个类的时候,其属性的寻找的方法有两种,分别是深度优先和广度优先. 如下的结构,新式类和经典类的属性查找顺序都一致.顺序为D--- ...
- 多态---父指针指向子类对象(父类引用指向子类对象)
我们都知道,面向对象程序设计中的类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今天就来看一下OC中类的三大特性: 一.封装 封装就是对类中的一些字段,方法进行保护,不被外界 ...
- 【Kotlin】Kotlin 类的继承 三 ( super 关键字使用 | super@ 外部调用父类方法 | 子类选择性调用 父类 / 接口 方法 super )
文章目录 I . 子类调用父类总结 II . 子类调用父类方法 ( super ) III . 子类内部类调用父类方法 ( super@ ) IV . 子类选择调用不同的 父类 / 接口方法 ( su ...
- 子类重写父类变量_为什么在子类中不重写超类的实例变量
子类重写父类变量 当我们在父类和子类中创建一个具有相同名称的变量,并尝试使用持有子类对象的父类引用访问它时,我们会得到什么? 为了理解这一点,让我们考虑下面的示例,在该示例中,我们在Parent和Ch ...
最新文章
- 一个基于特征向量的近似网页去重算法——term用SVM人工提取训练,基于term的特征向量,倒排索引查询相似文档,同时利用cos计算相似度...
- IDEA 上位?不!Eclipse Theia 1.0 发布!
- python爬虫基础知识点_入门Python爬虫知识点梳理
- mysql全量备份、增量备份实现方法
- web系统软件测试功能点,小程序、app、web测试的区别
- 以行为单位对字符串变量下标为奇数位置上的字符按其ASCii值从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中
- imagestring不支持中文,改用imagettftext
- 在DataWorks中实现指定UDF只能被指定账户访问
- 税友软件公司java面试_税友集团java面试题
- java同步调用rabbitmq,使用RabbitMQ可以放慢同步发布/消耗速度
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十):多客服接口说明
- 免疫算法(Immune Algorithm,IA)实例详解
- 人体姿态识别方案详解
- java定时每小时_java 定时任务,每日运行和每小时运行。
- redis—redis概述
- Linux通过系统函数设置系统时间
- 没有sln文件怎么打开
- CSS Tailwind
- windows编程之计时器
- Solidworks 无法显示略缩图解决办法
热门文章
- 【报告分享】2020产业互联网发展报告:新范式.pdf(附下载链接)
- 【白皮书分享】工业互联网平台新模式新业态白皮书.pdf
- 【白皮书分享】5G智慧城市安全需求与架构白皮书.pdf(附下载链接)
- 【推荐实践】推荐系统中模型训练及使用流程的标准化
- 【报告分享】2019年用户生命周期运营白皮书(京东尼尔森出品).pdf(附下载链接)
- boost/container/small_vector.hpp: No such file or directory on Ubuntu 14.04
- 万物皆可Graph | 当信息检索遇上图神经网络
- TensorFlow图像数据预处理
- java栈和队列_栈和队列的面试题Java
- python实现屏幕录制_GitHub - Sijiu/record-camera-and-screen: 录制摄像头和录制屏幕,两者之间可以轻易切换...