当前位置: 首页 > 面试题库 >

能够在print_r()的输出中看到一个变量,但是不确定如何在代码中访问它

百里景山
2023-03-14
问题内容

我用谷歌搜索,安装了Devel,Drupal for Firebug,但找不到。

我找到 我想要的东西,我知道它 在哪里 ;我只是不知道 如何 得到它。

我将其放在代码括号中,但是Devel告诉我文件名(我想粘贴到.tpl.php文件中)在这里:

field_image(Object)stdClass 
  处理程序(对象)views_handler_field_field 
    视图(对象)视图 
      结果(数组,2个元素) 
        0(对象)stdClass 
          _field_data(数组,1个元素) 
            nid(数组,2个元素) 
              实体(Object)stdClass
                field_image(数组,1个元素) 
                  und(Array,1 element)
                    0(数组,11个元素)                                      
                      文件名(字符串,23个字符)FILENAME.jpg

那么,如何使用PHP输出FILENAME.jpg?

<?php print $something->other; ?>

问题答案:

每当需要从变量中读取值时,就需要知道需要公式化哪个表达式才能访问该值。

对于一个简单的变量值,这很简单,您只需获取变量名称并通过在其前面加上$符号就可以将其作为变量访问:

var_dump($variable);

但是,这仅适用于诸如string或的简单数据类型integer。也有复合数据类型,即arrayobject。它们可以包含其他数据类型,无论是简单数据还是复合数据。您可以在PHP手册中学习如何访问数组的值以及如何从对象访问它们的值我想您已经知道了一点,所以只需要在这里链接即可。

了解到这一点后,您可以将其组合起来。例如,如果对象内有一个数组,并且其中有一个您想要获取的字符串,则需要将$符号和变量名与所需的访问器,属性名和数组键结合在一起。然后,您便获得了价值。您发布的数据表明您有一个包含其他对象和数组的对象,最后找到了变量名。

一些组合示例:

var_dump($variable->handler->view[0]->_field_data);

这是基于您上面提供的数据。$variable就是你开始,->用于需要被命名然后(例如,一个名称为变量)访问对象的成员:handler。如您在handler作为对象的调试输出中所看到的,您需要再次使用->来访问view它的成员。

现在view有所不同,因为它是一个数组。您可以通过使用[]并将键放在其中来访问数组的值。在我的示例中,关键是数字0。由于该数组条目的值再次是一个对象,因此在下一步中,您需要->再次使用。

您可以继续该游戏,直到到达您感兴趣的元素为止。已经拥有的调试输出可帮助您编写返回值的表达式。可能是:

$field_image->handler->view->result[0]->_field_data['nid']['entity']->field_image['und'][0]['filename']

但是我无法在我的系统上完全验证这一点。

但是,当发现问题时,使用它会很有帮助,var_dump因为您可以逐步扩展表达式直到找到元素。如果输入错误,您将立即看到。有时die();var_dump语句后放置a有助于避免在包含很多其他数据(这些信息将对您隐藏)之前结束响应。devel插件提供了附加的调试例程来转储突出的值。



 类似资料:
  • 我的石头、布、剪刀游戏出错了: 代码:

  • 问题内容: 如何在JavaScript或jQuery中访问PHP变量?我要写吗 我知道我可以在cookie中存储一些变量,并通过cookie访问这些值,但是cookie中的值是相对稳定的值。而且,有一个限制,您不能在cookie中存储许多值,并且该方法不是很方便。有更好的方法吗? 问题答案: 您的示例展示了将PHP变量传递给JavaScript的最简单方法。您还可以将json_encode用于数组

  • 我有一个类Main(它具有公共静态void Main(String[]args))和另一个类MyDocument。 Main类中存在一个变量,我想从MyDocument类中的函数alphabetOccurrence()访问该变量。我该怎么做呢?我不想用它作为静态变量。任何修改只能在函数中进行,其余的代码应该保持不变。

  • 本文向大家介绍如何创建只能设置一次但在Java中不是最终变量的变量?,包括了如何创建只能设置一次但在Java中不是最终变量的变量?的使用技巧和注意事项,需要的朋友参考一下 初始化最终变量后,您将无法进一步修改其值。即,您只能将值分配给最终变量一次。如果尝试将值分配给最终变量,则会生成编译时错误。 示例 编译时错误 实现“最终”功能 在不实际使用final关键字的情况下实现最终功能- 使用sette

  • 问题内容: 我想要一个可以创建一个实例的类,该实例的一个变量未设置(),然后初始化该变量,并 在初始化后 使其 不可变 。实际上,我想要一个可以在构造函数之外初始化的变量。 目前,我正在用抛出以下内容的setter来即兴创作: 这是我尝试做的一种好方法吗?我觉得我应该可以在初始化之后将其设置为不可变的,或者可以使用某种模式使它变得更加优雅。 问题答案: 让我建议您一点更优雅的决定。第一个变体(不引

  • 我已经在类的构造函数中创建了一个名为cboFlavour的复选框,并且还创建了方法,这样我就可以为它分配一些字符串值,如下所示: 但是Eclipse说cboFlavour不能解析(没有看到创建)?