class userVo extends model {

protected $userid = array(.....);

protected $username = array(.....);

.........

}

class model{

public function getVoProtectedProperties(){

如何获取userVo(对象而不是类) 内的protected属性?

$this指向子类实例

}

}

class Action {

public function init(){

$uservo = new userVo();

$uservo->getVoProtectedProperties();

}

}

-------------------------------------------------------------

不想使用: $class_date = new ReflectionClass(get_class($this)); 来得到属性。

能不能直接得到对象的所有protected属性的字段的值。

回复讨论(解决方案)

用魔术方法,不知道是不是你想要的

class userVo extends model {

protected $userid = array(.....);

protected $username = array(.....);

private function __get($property_name)

{

if(isset($this->$property_name))

{

return($this->$property_name);

}else

{

return(NULL);

}

}

private function __set($property_name, $value)

{

$this->$property_name = $value;

}

}

不用反射的话,可以在userVo 类中添加一个方法getProp

public function getProp(){

return get_class_vars(get_class($this));

}

不用反射,在类外是获取不到protected和private属性的

get_class_vars() 没有办法取得字段的修饰限定符protected.

因为不能确定字段的名称。 我想要的是任意的VO类的protected字段。 所以目前的办法是:

$class_date = new ReflectionClass(get_class($this));

$properties = $class_date->getProperties(ReflectionProperty::IS_PROTECTED);

但是我总是觉得:为什么不能从对象里面直接得到 protected字段的值呢?

是不是从安全原因考虑的?

如果不想用反射的话,每个VO类多加个数组,数组的内容就是protected的属性名,直接返回这个数组。

属性名本身就只能靠反射返回,按照编程的思路上来说,属性名应该是具名的,而按照你设计的目的来说,属性名非具名,还要靠一定的逻辑去获取,这本身是不是存在设计上的缺陷呢?'id','username' => 'username',);// 而这个对象中完全可以用$this->prote['userid']来代替$this->userid}class model{protected $prote = null;public function getVoProtectedProperties(){if(is_array($this->prote)) {return array_keys($this->prote);}}}class Action { public function init(){ $uservo = new userVo(); $uservo->getVoProtectedProperties(); // 这里如果想用$uservo->userid的话,完全可以用魔术方法来实现 }}

protected 保护模式 只在类本身及派生类中可访问

你的应用是在 父类中读取子类的受保护的数据,这本身就是不合规矩的(用反射太另类了)

如果是需要在类间传递数据,建议你设一个单例模式的 context 类做载体

父类读取子类的数据: 是因为有若干子类,继承自父类。 统一由父类解析,再将解析后的VO,交给表现层处理。

目的就是想: 配置一个VO, 增删改查全部自动搞定。 所以VO内的属性只能动态获取来解析。

父类不仅要读取子类的数据,而且父类还要能够篡改或补充子类的属性。

感觉PHP的动态性非常强大,适合做快速开发平台。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php protected 属性,PHP 如何获取protected属性?相关推荐

  1. php中获取对象的属性值,PHP获取对象属性的三种方法

    今天查看yii源码,发现yii\base\Model中的attribute()方法是通过反射获取对象的public non-static属性.记得以前看到的代码都是用get_object_vars() ...

  2. JAVA控件属性列表_Gradle获取项目属性列表

    执行 gradle properties 可以获取项目所有属性列表. 如下例: 例 11.16. 属性信息 gradle -q api:properties 的输出结果> gradle -q a ...

  3. java object 获取属性值_Java获取Object属性值

    [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之材质了解Materials [我给Unity官方视频教程做中文字幕]beginner Graphic ...

  4. Python OOP:继承、单继承、多继承、__mro__、子类重写父类同名属性和方法、子类调用父类同名属性和方法、多层继承、super()、私有(实例)属性和方法、获取修改私有属性值、私有类属性

    一.继承 Python⾯向对象的继承指的是多个类之间的所属关系,即⼦类默认继承⽗类的所有属性和⽅法. 继承作用:继承可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展. 在P ...

  5. java 获取对象属性值为空或者非空的属性名称

    目录 1. 获取对象属性值为空的属性名称 2. 复制对象非空属性值 1. 获取对象属性值为空的属性名称 /** * @Title: getNullPropertyNames* @Description ...

  6. 【MATLAB】基本绘图 ( 句柄值 | 对象句柄值获取 | 创建对象时获取句柄值 | 函数获取句柄值 | 获取 / 设置 对象属性 | 获取对象属性 )

    文章目录 一.对象句柄值获取 1.句柄值 2.创建对象时获取句柄值 3.函数获取句柄值 4.获取 / 设置 对象属性 二.获取对象属性 1.获取 线 对象属性 2.获取 坐标轴 对象属性 一.对象句柄 ...

  7. DOM常用几种获取元素属性方式

    1.DOM 提供的方法(API)获取 1.1 H5新增获取元素方式 document.getElementsByClassName 根据类名获得某些元素集合 document.querySelecto ...

  8. C#开发BIMFACE系列20 服务端API之获取模型数据5:批量获取构件属性

    系列目录     [已更新最新开发文章,点击查看详细] 在<C#开发BIMFACE系列18 服务端API之获取模型数据3:获取构件属性>中介绍了获取单个文件/模型的单个构建的属性,本篇介绍 ...

  9. C#开发BIMFACE系列18 服务端API之获取模型数据3:获取构件属性

    系列目录     [已更新最新开发文章,点击查看详细] 本篇主要介绍如何获取单文件/模型下单个构建的属性信息. 请求地址:GET https://api.bimface.com/data/v2/fil ...

最新文章

  1. 使用npm打包后生成的package.json中重要字段含义
  2. C++_pointer-like classes,function-like classes
  3. tableau实战系列(二十八)-以可视化的方式打开关联分析算法购物篮分析(Market Basket Analysis)
  4. C语言之do_while输出菱形
  5. 2018大华软件竞赛——模拟赛——第二题
  6. CAD 删除 _ArchTick 块定义
  7. springboot+vue+elementUI 校园志愿者管理系统#毕业设计
  8. [基本功]辛普森悖论
  9. 离线学校计算机协会工作计划,计算机协会(社团)各月工作总结及工作计划.docx...
  10. 5.2 差模信号、共模信号、共模抑制比
  11. IOS Xcode 开发适配最低IOS版本 适配POD库
  12. em模型补缺失值_缺失值填补方法
  13. 华为鸿蒙系统是安卓套壳?直接看代码
  14. 酷客多小程序重磅升级,这十几个模板足以打动你的心!
  15. 用于分类的神经网络算法,神经网络算法通俗解释
  16. Unity小游戏——3D坦克大战
  17. WWDG 窗口看门狗 知识详解
  18. Oracle时间函数 to_char()及常用时间格式
  19. 股指期货策略精选合集
  20. IPFS直播最详细解读—FileCoin Demo演示

热门文章

  1. 解决百度网盘(百度云)分享链接不存在失效、分享的文件已经被取消的问题
  2. Thinkpad T420 指纹开机 win10 解决方案
  3. unity3d Sentinel key not found (H0007)解决方法
  4. Eslint报错整理与解决方法(持续整理)
  5. 您如何重命名MongoDB数据库?
  6. 如何使用Git解决“错误:错误索引 - 致命:索引文件损坏”
  7. MySQL中INDEX,PRIMARY,UNIQUE,FULLTEXT之间的区别?
  8. 安装sql server 2016 always on配置dtc支持时遇到的问题
  9. Phantom.js维护者退出,项目的未来成疑
  10. nginx 访问控制 防盗链