PHP获取对象属性的三种方法实例分析


Posted in PHP onJanuary 03, 2019

本文实例讲述了PHP获取对象属性的三种方法。分享给大家供大家参考,具体如下:

今天查看yii源码,发现yii\base\Model中的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中实现进程间通讯
Oct 09 PHP
谈谈PHP语法(5)
Oct 09 PHP
社区(php&&mysql)二
Oct 09 PHP
linux php mysql数据库备份实现代码
Mar 10 PHP
PHP5 字符串处理函数大全
Mar 23 PHP
PHP中根据IP地址判断城市实现城市切换或跳转代码
Sep 04 PHP
PHP面向对象教程之自定义类
Jun 10 PHP
php中socket通信机制实例详解
Jan 03 PHP
PHP的pcntl多进程用法实例
Mar 19 PHP
php 在字符串指定位置插入新字符的简单实现
Jun 28 PHP
php+ajax实现带进度条的上传图片功能【附demo源码下载】
Sep 14 PHP
PHP内存溢出优化代码详解
Feb 26 PHP
PHP获取HTTP body内容的方法
Dec 31 #PHP
php两点地理坐标距离的计算方法
Dec 29 #PHP
php如何计算两坐标点之间的距离
Dec 29 #PHP
PHP命名空间简单用法示例
Dec 28 #PHP
PHP实现函数内修改外部变量值的方法示例
Dec 28 #PHP
PHP面向对象程序设计继承用法简单示例
Dec 28 #PHP
PHP抽象类基本用法示例
Dec 28 #PHP
You might like
利用js调用后台php进行数据处理原码
2006/10/09 PHP
解析posix与perl标准的正则表达式区别
2013/06/17 PHP
php中的静态变量的基本用法
2014/03/20 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
2019/06/05 PHP
Avengerls vs KG BO3 第三场2.18
2021/03/10 DOTA
Jquery 自定义动画概述及示例
2013/03/29 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
浅谈angularJS 作用域
2015/07/05 Javascript
基于jQuery+PHP+Mysql实现在线拍照和在线浏览照片
2015/09/06 Javascript
分享Bootstrap简单表格、表单、登录页面
2017/08/04 Javascript
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
微信小程序实现tab切换效果
2017/11/21 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
2018/01/22 jQuery
详解Express笔记之动态渲染HTML(新手入坑)
2018/12/13 Javascript
vue改变对象或数组时的刷新机制的方法总结
2019/04/24 Javascript
微信小程序用户盒子、宫格列表的实现
2020/07/01 Javascript
Python生成随机密码
2015/03/10 Python
Python实现Tab自动补全和历史命令管理的方法
2015/03/12 Python
Python3访问并下载网页内容的方法
2015/07/28 Python
详解python进行mp3格式判断
2016/12/23 Python
利用Python实现在同一网络中的本地文件共享方法
2018/06/04 Python
浅谈django orm 优化
2018/08/18 Python
在PyCharm中批量查找及替换的方法
2019/01/20 Python
wxPython色环电阻计算器
2019/11/18 Python
JAVA SWT事件四种写法实例解析
2020/06/05 Python
Python列表的深复制和浅复制示例详解
2021/02/12 Python
HTML5 MiranaVideo播放器 (代码开源)
2010/06/11 HTML / CSS
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
2016/01/11 HTML / CSS
Zatchels官网:英国剑桥包品牌
2021/01/12 全球购物
巴西最大的运动品牌:Olympikus
2020/07/14 全球购物
企业治理工作自我评价
2013/09/26 职场文书
管理科学大学生求职信
2013/11/13 职场文书
高中毕业的自我鉴定
2013/12/09 职场文书
高中生期末评语大全
2014/01/28 职场文书
工程师岗位职责规定
2014/02/26 职场文书
有关三国演义的读书笔记
2015/06/25 职场文书