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 相关文章推荐
把从SQL中取出的数据转化成XMl格式
Oct 09 PHP
在PHP中利用XML技术构造远程服务(上)
Oct 09 PHP
ftp类(example.php)
Oct 09 PHP
PHP新手上路(十一)
Oct 09 PHP
php下实现伪 url 的超简单方法[转]
Sep 24 PHP
php中将地址生成迅雷快车旋风链接的代码[测试通过]
Apr 20 PHP
MySQL时间字段究竟使用INT还是DateTime的说明
Feb 27 PHP
PHP正则验证Email的方法
Jun 15 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
May 19 PHP
在php的yii2框架中整合hbase库的方法
Sep 20 PHP
PHP时间戳和日期相互转换操作实例小结
Dec 18 PHP
微信支付之JSAPI公众号支付详解
May 15 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
PHP数组无限分级数据的层级化处理代码
2012/12/29 PHP
PHP 验证登陆类分享
2015/03/13 PHP
PHP获取数组的键与值方法小结
2015/06/13 PHP
十大使用PHP框架的理由
2015/09/26 PHP
兼容多浏览器的字幕特效Marquee的通用js类
2008/07/20 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
js控制不同的时间段显示不同的css样式的实例代码
2013/11/04 Javascript
Javascript之this关键字深入解析
2013/11/12 Javascript
js中typeof的用法汇总
2013/12/12 Javascript
jquery禁用右键示例
2014/04/28 Javascript
推荐 21 款优秀的高性能 Node.js 开发框架
2014/08/18 Javascript
nodejs 中模拟实现 emmiter 自定义事件
2016/02/22 NodeJs
jQuery+CSS3文字跑马灯特效的简单实现
2016/06/25 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
2016/08/01 Javascript
AngularJS  ng-table插件设置排序
2016/09/21 Javascript
Angular中实现树形结构视图实例代码
2017/05/05 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
JS+HTML5实现图片在线预览功能
2017/07/22 Javascript
vue实现简单loading进度条
2018/06/06 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
Node.js实现批量下载图片简单操作示例
2020/01/18 Javascript
Webpack3+React16代码分割的实现
2021/03/03 Javascript
Python列表(list)、字典(dict)、字符串(string)基本操作小结
2014/11/28 Python
Python ValueError: invalid literal for int() with base 10 实用解决方法
2015/06/21 Python
Python制作爬虫抓取美女图
2016/01/20 Python
Python实现确认字符串是否包含指定字符串的实例
2018/05/02 Python
Python设计模式之抽象工厂模式原理与用法详解
2019/01/15 Python
pytorch获取vgg16-feature层输出的例子
2019/08/20 Python
英国假睫毛购买网站:FalseEyelashes.co.uk
2018/05/23 全球购物
中国京东和泰国中央集团合资的网站:JD CENTRAL
2020/08/22 全球购物
年度考核自我鉴定
2013/11/09 职场文书
小学教师岗位职责
2013/11/25 职场文书
董事长助理岗位职责
2015/02/11 职场文书
《绝招》教学反思
2016/02/20 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书