[英]Access protected object in array in 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
"$this-> $var;" 这意味着变量变量,这会抛出 php 通知未定义的变量 $var,
你必须使用
return $this->var;
或者
return $this->vid
你在做什么:
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
对象是硬编码的。
但说真的,你可能想咨询另一个类的创建者,也许你会设计一种方法来最好地管理这个。 如果我敢说,我提出的解决方案并不是一个好的做法。
Drupal 成员作为问题中呈现的数组的答案看起来像 Drupal 数组
我相信你根本不需要一个新类,你只需要获取节点的对象。 所以,下面一行对你有用。
$parent_node = menu_get_object();
现在,您可以通过$parent_node->vid
访问
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.