【问题标题】:Pass current array as reference [PHP/Drupal6]传递当前数组作为参考 [PHP/Drupal6]
【发布时间】:2013-06-21 00:04:32
【问题描述】:

我有一个变量$doctype,它是一个数组:

$doctype = array(
    'news' => ('news'),
    'documents' => ('documents'),
    'forms' => ('forms'),
    'other' => ('other'),
);

用作另一个数组的选项:

$form['doc_type'] = array(
    '#title' => 'Document Type',
    '#type' => 'radios',
    '#options' => $doctype,
    '#size' => '30',
    '#required' => TRUE,
    '#default_value' => $doctype['news'],

现在我正在尝试将当前值传递给另一个函数

我试过了:

form($form_state, &$doctype) {

但它显示为缺少参数

我想通过引用传递它,而不是作为返回(已经占用/不想解决它)

感谢任何帮助

【问题讨论】:

  • 参数是否为引用由函数定义控制,而不是调用者。
  • 如果您想避免不必要的复制,PHP 会为您解决这个问题。它使用写时复制,因此仅在函数修改参数时才进行复制。

标签: php arrays drupal pass-by-reference


【解决方案1】:

假设form() 将其第二个参数指定为引用,那么您不应将&$doctype 作为参数传递。如果函数将参数指定为引用,那么您只需传递该变量,它将作为引用传递。

例如

<?php
    function form($var1, &$var2) {
        $var2[2] = 5;
    }
    $var2 = array(1,2,3,4);
    form('test', $var2);
    echo $var2[2]; // Echoes '5';
?>

但是,我再次假设 form() 内置于 drupal 中,在这种情况下,据我所知,在不更改定义 form() 的核心代码的情况下,无法将 $doctype 作为参考传递

出于好奇,为什么需要将其作为参考传递?你能澄清一下“已经被占用/不想解决它”

【讨论】:

  • 我需要它通过,所以当他们上传文件时,它的目录取决于他们的文档类型。该函数已经返回 $form,如果不返回数组或对象,我不能返回多个值,而且我已经尝试过这两种方法,所以我只是这么说,所以人们不建议做我已经尝试过的事情。
  • 另外 - 只是引用 var 本身的函数 form($formstate, $doctype) 给了我一个缺少参数的错误
  • form() 在哪里定义?我猜它需要两个以上的参数,或者您没有定义两者之一。无论如何,鉴于您的要求,您可能需要编写自己的 form() 实现以完成您想要做的事情。
猜你喜欢
  • 2011-12-15
  • 1970-01-01
  • 2012-12-17
  • 2012-01-17
  • 2014-03-05
  • 2019-12-28
  • 2016-04-11
  • 2014-02-10
  • 1970-01-01
相关资源
最近更新 更多