如何修复 php 错误“无法通过引用传递参数 1”?

sai*_*oon 1 php drupal

我知道在 stackoverflow 上有很多与此错误类似的问题,但没有一个能解决我的问题。我的文件中有一个函数high_contrast.module

function high_contrast_install() {
  $background = \Drupal::config('high_contrast.settings')->get('colors_background');
  $text = \Drupal::config('high_contrast.settings')->get('colors_text');
  $hyperlinks = \Drupal::config('high_contrast.settings')->get('colors_hyperlinks');

  \Drupal::service('file_system')->prepareDirectory(HIGH_CONTRAST_CSS_FOLDER, FileSystemInterface::CREATE_DIRECTORY); // LINE 17!!!
  $css = _high_contrast_build_css();
  file_save_data($css, HIGH_CONTRAST_CSS_LOCATION, FileSystemInterface::EXISTS_REPLACE);
}
Run Code Online (Sandbox Code Playgroud)

当我想安装该模块时,出现错误:

Error: Cannot pass parameter 1 by reference in high_contrast_install() (line 17 of modules\high_contrast\high_contrast.install).
Run Code Online (Sandbox Code Playgroud)

我该如何修复它?:(

第 17 行就是:

  \Drupal::service('file_system')->prepareDirectory(HIGH_CONTRAST_CSS_FOLDER, FileSystemInterface::CREATE_DIRECTORY);
Run Code Online (Sandbox Code Playgroud)

Eri*_*ult 5

正如错误所示,FileSystem::prepareDirectory通过引用获取其第一个参数:

public function prepareDirectory(&$directory, $options = self::MODIFY_PERMISSIONS) {
  # $directory being assigned new value
}
Run Code Online (Sandbox Code Playgroud)

因此,如果你向 PHP 传递一个常量,它会抛出一个错误:

常量是简单值的标识符(名称)。顾名思义,该值在脚本执行期间不能更改

您需要在函数调用之前将常量值分配给变量:

$dir = HIGH_CONTRAST_CSS_FOLDER;
\Drupal::service('file_system')->prepareDirectory($dir, FileSystemInterface::CREATE_DIRECTORY);
Run Code Online (Sandbox Code Playgroud)