繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM