在PHP中访问数组中的受保护对象

问题描述 投票:0回答:3

我试图访问以下内容,需要获取[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
php class drupal protected
3个回答
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对象是硬编码的。

但是说真的,你可能想咨询另一个班级的创建者,也许你会想办法最好地管理这个。如果我敢说,我提出的解决方案并不是一个好的做法。


2
投票

“$ this-> $ var;”这意味着变量变量,这个抛出php通知未定义变量$ var,

你必须使用

return $this->var; 

要么

return $this->vid

0
投票

对于Drupal成员的回答,问题中呈现的数组看起来像Drupal数组

我相信你根本不需要一个新类,你只需要获取节点的对象。所以,下面一行将适合你。

$parent_node = menu_get_object();

现在,您可以通过$parent_node->vid访问

© www.soinside.com 2019 - 2024. All rights reserved.