在PHP中访问数组中的受保护对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在PHP中访问数组中的受保护对象相关的知识,希望对你有一定的参考价值。
我试图访问以下内容,需要获取[vid]数组单元格的值。
FieldCollectionItemEntity Object
(
[fieldInfo:protected] =>
[hostEntity:protected] => stdClass Object
(
**[vid]** => 119
[uid] => 1
[title] => My Page Name
[log] =>
[status] => 1
[comment] => 1
[promote] => 0
[sticky] => 0
[vuuid] => 3304d1cf-e3cf-4c5a-884a-4abb565ddced
[nid] => 119
[type] => subpage
[language] => und
[created] => 1408621327
[changed] => 1408640191
[tnid] => 0
[translate] => 0
[uuid] => 39145013-6637-4062-96e7-1b4589609c4f
[revision_timestamp] => 1408640191
我尝试了下面这个,但我想我从这里没有线索: -
$mything = new myClass;
print $mything->accessObjectArray();
class myClass {
protected $var;
function accessObjectArray(){
return $this-> $var;
}
//other member functions
}
更新
我实际上只能访问具有以下多维数组的变量$ content。我想要的只是获取数组单元格[vid]的值。
要做到这一点,我可以打印$content["field_image_title"]["#object"]
但在此之后它受到保护。这就是我想知道如何访问这个数组的地方。我很遗憾没有访问FieldCollectionItemEntity
包含在我的页面中。
这样做: - 我得到以下输出: -
print_r($content);
Array
(
[field_image_title] => Array
(
[#theme] => field
[#weight] => 0
[#title] => Image Title
[#access] => 1
[#label_display] => hidden
[#view_mode] => full
[#language] => und
[#field_name] => field_image_title
[#field_type] => text
[#field_translatable] => 0
[#entity_type] => field_collection_item
[#bundle] => field_image_collection
[#object] => FieldCollectionItemEntity Object
(
[fieldInfo:protected] =>
[hostEntity:protected] => stdClass Object
(
[vid] => 119
[uid] => 1
[title] => My Page Name
[log] =>
[status] => 1
[comment] => 1
[promote] => 0
[sticky] => 0
[vuuid] => 3304d1cf-e3cf-4c5a-884a-4abb565ddced
[nid] => 119
[type] => subpage
[language] => und
[created] => 1408621327
[changed] => 1408640191
[tnid] => 0
[translate] => 0
[uuid] => 39145013-6637-4062-96e7-1b4589609c4f
[revision_timestamp] => 1408640191
[revision_uid] => 1
你在做什么:
return $this-> $var;
正在访问以$var
变量中包含的名称命名的属性,该变量不包含定义它的范围内的任何内容。将它作为函数参数传递:
function accessObjectArray($var){
return $this-> $var;
}
print $mything->accessObjectArray('vid');
但无论如何,这将无法工作,因为(如@MikeBrant所述)您的父对象属性中有一个对象。这样的事情可能会更好
$o = new FieldCollectionItemEntity() // assumes this will construct the object in the state you have posted it
$o->accessObjectArray('hostEntity')->accessObjectArray('vid');
请注意,必须在两个对象中定义方法accessObjectArray($var)
才能使其工作
受保护财产的想法是防止你想要实际发生的事情。但! protected表示只有类及其扩展类才能访问值。创建自己的类,扩展另一个:
class myClass extends FieldCollectionItemEntity {
function accessParentProtectedVars($var){
return $this->hostEntity->$var;
}
//other member functions
}
那么你的accessObjectArray()
函数将能够访问受保护的属性。请注意,访问hostEntity
对象是硬编码的。
但是说真的,你可能想咨询另一个班级的创建者,也许你会想办法最好地管理这个。如果我敢说,我提出的解决方案并不是一个好的做法。
“$ this-> $ var;”这意味着变量变量,这个抛出php通知未定义变量$ var,
你必须使用
return $this->var;
要么
return $this->vid
对于Drupal成员的回答,问题中呈现的数组看起来像Drupal数组
我相信你根本不需要一个新类,你只需要获取节点的对象。所以,下面一行将适合你。
$parent_node = menu_get_object();
现在,您可以通过$parent_node->vid
访问
以上是关于在PHP中访问数组中的受保护对象的主要内容,如果未能解决你的问题,请参考以下文章