当前位置: 首页 > news >正文

企业网站运行通知网络公司网站建设

企业网站运行通知,网络公司网站建设,p2p种子网站建设,大家保险公司官网今天在推上看到一条获取PHP类私有属性的推文,感觉很有意思:顺着推文联想,还有其他方式吗?经过自己的测试及网上答案,总结出三种方法:1. 反射反射可以获取类的具体信息,要获取私有属性的值&#…

今天在推上看到一条获取PHP类私有属性的推文,感觉很有意思:

202091082622568.jpg?202081082720

顺着推文联想,还有其他方式吗?经过自己的测试及网上答案,总结出三种方法:

1. 反射

反射可以获取类的具体信息,要获取私有属性的值,只需将对应属性的ReflectionProperty实例设置为可访问再取值就行了。示例代码如下:namespace tlanyan;

class Foo {

private $bar = "Foo bar!";

}

// 获取反射类及反射属性

$class = new \ReflectionClass(Foo::class);

$property = $class->getProperty("bar");

// 设置属性可访问

$property->setAccessible(true);

$foo = new Foo;

// 获取对象属性值

// 注重:只能通过 ReflectionProperty 实例的 getValue 方法访问

// 不能这样直接访问: $foo->bar;

echo $property->getValue($foo), PHP_EOL:

// 输出: Foo bar!

2. 转换成数组

这种方法用将对象强制转换成数组,再通过键获取其值。示例代码如下:class Foo {

private $bar = "Foo bar!";

}

$foo = new Foo;

// 强制转型

$attrs = (array)$foo;

// 拼接key,注重 "\0" 不能改成单引号!

$key = "\0" . Foo::class . "\0" . "bar";

echo $attrs[$key], PHP_EOL;

// 输出: Foo bar!

上述代码中key的拼接方式比较诡异,key规则如下:public属性, key是 属性名;

protected属性,key是 \0*\0属性名;

private属性, key是 \0类名\0属性名。

注重 \0 是一个字符(不是两个),对应的ASCII码是数字0。编程时要用双引号将其引起来。不能使用单引号,否则转义失效,那就是两个字符。如果你有C语言基础,应该知道 \0 就是字符串的结束符。这个符号直接输出不会显示,但可以通过strlen或者ord让其现形:foreach ($attrs as $key => $value) {

echo "key:$key", ", key length:", strlen($key), ", ascii: ";

for ($i = 0; $i 

echo ord($key[$i]), " ";

}

echo PHP_EOL;

}

// 输出

// key:Foobar, key length:8, ascii: 0 70 111 111 0 98 97 114

// Foobar 有6个字符,加上两个不显示字符,所以长度是8

还需要注重拼接private属性时类名应该是 “完全限定类名” ,建议通过Foo::class的方式获取。

与强制转换成数组类似的另一种方法是serialize,但是serialize比较慢,并且序列化后的字符串更难辨认结构和处理,不建议使用。

3. 闭包

文章开头的推特截图已经展示了闭包的用法,其中call方法在PHP7中引入,另一个是PHP5.4引入的bindTo。call和bindTo的用法示例如下:namespace tlanyan;

class Foo {

private $bar = "Foo bar!";

}

$foo = new Foo;

// 闭包(匿名函数)是PHP5.3引入的功能

$closure = function() { return $this->bar; };

// PHP5.4起支持bindTo方法

$method = $closure->bindTo($foo, Foo::class);

echo $method(), PHP_EOL;

// PHP7引入call方法,可绑定this直接执行

echo $closure->call($foo), PHP_EOL;

bindTo方法的第二个参数注重传入对象的 “完全限定类名”,指示函数应该放置在该类的作用域下,从而可以访问私有属性。

总结

性能: 数组 > 反射 > 闭包

易用性: 闭包 > 数组 > 反射

推荐: 闭包 > 反射 > 数组

http://www.lbrq.cn/news/2660005.html

相关文章:

  • php如何做视频网站培训心得体会模板
  • 模板网站怎么做卖全球搜
  • 网站备案幕布可以ps么app优化推广
  • 雄安智能网站建设电话学好seo
  • 网站测试软件北京互联网公司排名
  • 福州网站建设营销q479185700刷屏seo诊断工具网站
  • 北京网页制作服务商沈阳seo排名优化教程
  • 怎么建网站站点网络服务提供者知道或者应当知道
  • wordpress nva西安专业seo
  • 日本人做鸭网站网络营销的含义特点
  • 网站适合用angular做吗网页制作接单平台
  • 微企免费网站建设西安百度推广排名
  • 网站文字规范济南今日头条新闻
  • 网站建设公司网站定制开发说到很多seo人员都转行了
  • 专业做网站哪家强品牌建设
  • 北京做网站哪家专业今日国内新闻头条大事
  • 网站公司大全免费平台
  • 网站如何做seosem对seo的影响有哪些
  • 网站建设捌金手指花总二六深圳品牌seo
  • 石家庄做网站wsjz泰安百度推广电话
  • 个人做同城网站赚钱吗武汉网站建设推广公司
  • 沈阳网站外包互联网平台有哪些
  • 1元云购网站建设营销推广的公司
  • 门户网站建设信息工作讲话拓客团队怎么联系
  • 江西省赣州市章贡区邮政编码seo外推
  • 盘锦威旺做网站建设公司百度平台推广
  • 绵阳网站建设制作友情链接举例
  • 在什么网站可以接活做百度账号登录不了
  • 无锡万度网站建设外包
  • com网站是用什么做的高明公司搜索seo
  • Pico+unity VR入门开发超详细笔记2025
  • C# 中常用集合以及使用场景
  • 元数据管理与数据治理平台:Apache Atlas 分类传播 Classification Propagation
  • 在nodejs中使用Java方法
  • 算法_python_学习记录_01
  • RecyclerView 中 ViewHolder