1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > PHP对象转换为数组array(object) 数组值读取

PHP对象转换为数组array(object) 数组值读取

时间:2020-04-20 02:48:14

相关推荐

PHP对象转换为数组array(object) 数组值读取

后端开发|php教程

数组,php,转换

后端开发-php教程

PHP对象转换为数组array(object) 数组值读取

微信截图红包java源码,vscode调试弹出窗口,ubuntu进入 .,jsp怎么tomcat,sqlite批量导入数据,东莞常平网页设计,.net连接数据库教程,怎么使用cdn服务器,php图片批量上传插件,简洁美观的前端框架,爬虫工具有哪些,php 反射,福州seo服务,springboot最佳,织梦下载标签,彩票网站代购程序,html5网页播放器,模板自适应,有网站后台,页面布局html嵌套,管理系统按钮素材,微信小程序淘客demolzw

$objecta class objecta { protected $temp; }$arr = (array)$objecta;

$arr 怎样读取 temp值?

$arr[‘temp’],$arr[‘*temp’] 都读取不到

官方说明:

html手机导航源码下载,ax200ubuntu,tomcat解压缩安装教程,爬虫的常用模块,布尔教育php怎么样,seo网站maltelzw

如果一个 object 类型转换为 array,则结果为一个数组,其单元为该对象的属性。键名将为成员变量名,不过有几点例外:整数属性不可访问;私有变量前会加上类名作前缀;保护变量前会加上一个 ‘*’ 做前缀。这些前缀的前后都各有一个 NULL 字符。这会导致一些不可预知的行为:

多商家电商平台php免费源码,wubi装ubuntu出错,python爬虫登录失败,php $row[],seo数据接口lzw

回复内容:

PHP对象转换为数组array(object) 数组值读取

$objecta class objecta { protected $temp; }$arr = (array)$objecta;

$arr 怎样读取 temp值?

$arr[‘temp’],$arr[‘*temp’] 都读取不到

官方说明:

如果一个 object 类型转换为 array,则结果为一个数组,其单元为该对象的属性。键名将为成员变量名,不过有几点例外:整数属性不可访问;私有变量前会加上类名作前缀;保护变量前会加上一个 ‘*’ 做前缀。这些前缀的前后都各有一个 NULL 字符。这会导致一些不可预知的行为:

public_val = $params[public]; }}$object2array = function ($object) { $ref = new ReflectionClass($object); $props = $ref->getProperties(); $arr = []; foreach ($props as $prop) { $prop->setAccessible(true); $arr[$prop->getName()] = $prop->getValue($object); $prop->setAccessible(false); } return $arr;};$result = $object2array(new Objecta([ public => public_val,]));var_dump($result);

我觉得你应该实现ArrayAccess接口

我觉得还是类型的原因。protectprivate的属性本来就不能从外部获取到吧,我试了一下只有public的属性能获取到。

感觉还是用 ArrayAccess 吧, 最简单的数组形式访问对象,直接在你的类上实现该接口。反射之类的用在这有点怪怪的呢、

class Obj implements \ArrayAccess{}

\ArrayAccess 接口的结构,你的类必须要实现这些方法。

ArrayAccess {/* 方法 */abstract public boolean offsetExists ( mixed $offset )abstract public mixed offsetGet ( mixed $offset )abstract public void offsetSet ( mixed $offset , mixed $value )abstract public void offsetUnset ( mixed $offset )}

小示例、

class Obj implements \ArrayAccess{ protected $_data = data aaa; /*** 检查数组键是否存在,本例中对象成员就是数组元素、* 对一个实现了 ArrayAccess 接口的对象使用 isset() 或 empty() 时,此方法将执行。* ~~~* $obj = new Obj();* var_dump(isset($obj[\_data]));* ~~~* @param mixed $offset 要检查的键名* @return boolean*/ public function offsetExists($offset) { return array_key_exists($offset, get_object_vars($this)); } /*** 检查数组键是否存在,在本例中我们把键设置为* 对一个实现了 ArrayAccess 接口的对象使用 isset() 或 empty() 时,此方法将执行。* ~~~* $obj = new Obj();* unset($obj[\_data]);* var_dump(isset($obj[\_data]));* ~~~* @param mixed $offset 要检查的键名* @return boolean*/ public function offsetUnset($key) { if (array_key_exists($key,get_object_vars($this)) ) { unset($this->{$key}); } } /*** 累了不写了这个是设置数组成员,本例中就是对象属性、*/ public function offsetSet($offset, $value) { $this->{$offset} = $value; } public function offsetGet($var) { return $this->$var; }}$obj = new Obj();echo $obj[\_data];

不好意思,回答时激情满满,写几行就枯燥了、后俩没注释你自己翻资料去吧、

<?phpclass objecta implements arrayaccess { public $temp = 1;public function offsetSet($offset, $value) { var_dump(__METHOD__); } public function offsetExists($var) { var_dump(__METHOD__); if ($var == "foobar") { return true; } return false; } public function offsetUnset($var) { var_dump(__METHOD__); } public function offsetGet($var) { var_dump(__METHOD__); return "value"; }}$obj = new objecta();echo $obj[ emp];

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。