PHP获取对象属性的三种方法实例分析
本文实例讲述了PHP获取对象属性的三种方法。分享给大家供大家参考,具体如下:
今天查看yii源码,发现yiibaseModel中的attribute()
方法是通过反射获取对象的public non-static属性。记得以前看到的代码都是用get_object_vars()
这个函数获取的,昨天查看php文档,发现还可以用foreach遍历对象属性。于是写个例子练习下。
class TestClass {
private $a;
protected $b;
public $c;
public $d;
public static $e;
private function funcA() {
}
protected function funcB() {
}
public function funcC() {
}
public function getPropertyMethodOne() {
echo "[get_object_vars]", PHP_EOL;
$vars = get_object_vars($this);
foreach ($vars as $k = $v) {
echo $k, ' = ', $v, PHP_EOL;
}
}
public function getPropertyMethodTwo() {
echo "[foreach object]", PHP_EOL;
foreach ($this as $k = $v) {
echo $k, ' = ', $v, PHP_EOL;
}
}
public function getPropertyMethodThree() {
echo "[reflection]", PHP_EOL;
$class = new ReflectionClass($this);
foreach ($class- getProperties(ReflectionProperty::IS_PUBLIC) as $property) {
if (!$property- isStatic()) {
echo $property- getName(), ' = ', $property- getValue($this), PHP_EOL;
}
}
}
}
测试代码一
$obj = new TestClass();
echo "[get_object_vars]", PHP_EOL;
$vars = get_object_vars($obj);
foreach ($vars as $k = $v) {
echo $k, ' = ', $v, PHP_EOL;
}
echo "[foreach object]", PHP_EOL;
foreach ($obj as $k = $v) {
echo $k, ' = ', $v, PHP_EOL;
}
echo "[reflection]", PHP_EOL;
$class = new ReflectionClass($obj);
foreach ($class- getProperties(ReflectionProperty::IS_PUBLIC) as $property) {
if (!$property- isStatic()) {
echo $property- getName(), ' = ', $property- getValue($obj), PHP_EOL;
}
}
输出:
[get_object_vars] c = d = [foreach object] c = d = [reflection] c = d =
可见,当着三种方法用在类的外部时,结果是一样的。get_object_vars()
和foreach是获取到的是对象的public non-static属性,而通过反射的话则需要手动筛选出public non-static属性。
测试代码二
$obj = new TestClass();
$obj- getPropertyMethodOne();
$obj- getPropertyMethodTwo();
$obj- getPropertyMethodThree();
输出
[get_object_vars] a = b = c = d = [foreach object] a = b = c = d = [reflection] c = d =
可见,get_object_vars()
和foreach用在类内部时,private、protected、public的实例属性都能获取到。反射就不用说了,通过手动筛选,各种类型的属性都能获取到。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
- ASM 翻译系列第十三弹:ASM 高级知识 - Forcing the issue
- ASM 翻译系列第十四弹:ASM Internal Rebalancing act
- DIY网站统计:WordPress排除管理员评论及精准友链数的方法
- Linux运维工程师:30道面试题整理
- ASM 翻译系列第十五弹:ASM Internal ASM File Directory
- ASM 翻译系列第十六弹:ASM Internal ASM Active Change Directory
- ASM 翻译系列第十七弹:ASM Internal ASM Disk Directory
- Windows 7下获取System权限
- ASM 翻译系列第十八弹:ASM Internal ASM file number 5
- 菜单式Shell运维脚本调试小记
- 优化Postgres-x2 GTM
- 启用某些Linux发行版的root帐号
- Linux中的完美截图工具:Deepin-ScreenShot
- ASM 翻译系列第二十弹:ASM Internal ASM file number 7
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- 把tcga大计划的CNS级别文章标题画一个词云
- VIM编辑器基操
- Weevely入手指南
- Mybatis是如何执行一条SQL命令的?
- 如何为机器学习工程设计Python接口
- [举个栗子]增加组件通用性的几个点
- 《剑指offer》第14天:最长公共前缀
- 20,000 字帮你搞定策略模式!
- LeetCode 09正则表达式匹配(递归VS动态规划)
- 初识ABP vNext(5):ABP扩展实体
- 教你如何用Paddle.js开发智能化微信小程序
- Spark+Kudu的广告业务项目实战笔记(一)
- Java的新未来:逐渐“Kotlin化”
- 用 GitLab 做 CI/CD 是什么感觉,太强了!!
- 避坑指南:通过expdp/impdp迁移数据的7个坑