【问题标题】:Parse Error: Unexpected double quotes in array [closed]解析错误:数组中出现意外的双引号 [关闭]
【发布时间】:2014-01-02 18:49:32
【问题描述】:

我有一个类似下面的数组结构:

$system_data = array(
    87 => array(
        'message' => "{$message_name} logged a new activity.",
        'description' => 'patient logged a new activity',
        'message_type' => 3
    )
)

当调用函数时,它会找到引用的消息字符串(从 ID - 87)并将相关的$message_name 变量值注入到字符串中。如果我返回一个直接注入变量的静态双引号字符串,它会起作用,但是当我将其转置到我的数组时(更改字符串上的双引号并向其添加 {$variable_name} 语法,我收到以下错误:

解析错误:语法错误,意外'"'

从我的字符串中取出{$} 可以解决问题,所以这一定意味着双引号不会对数组抛出错误,而是{$} 在双引号中抛出错误。有什么想法吗?

编辑:

根据要求,代码设置如下:

class Log_model extends CI_Model {
   const SUPERVISOR_PROGRAM_UPDATED = 87;

    private $system_data = array(
        87 => array(
            'message' => "{$message_name} logged a new activity.",
            'description' => 'patient logged a new activity',
            'message_type' => 3
        )
    )

    /*functions here*/
}

【问题讨论】:

  • 您在哪一行收到此错误?另外,我不能reproduce the error
  • 这里没有解析错误codepad.org/sdyzGNts。解析错误发生在您的程序开始运行之前,因此您可以将所有“它如何在代码中到达这一点”场景抛到窗外。
  • @Fred-ii- 会试试这个。
  • @Prusprus No. 3v4l.org/Kq9Qg。显示您的完整代码。
  • 这样 - 在类中设置属性时不能使用动态元素。属性必须全部是静态的。 Example 1 php.net/manual/en/language.oop5.properties.php "这个声明可能包含一个初始化,但是这个初始化必须是一个常数值"

标签: php arrays string


【解决方案1】:
class Log_model extends CI_Model {
   const SUPERVISOR_PROGRAM_UPDATED = 87;

    private $system_data = array(
        87 => array(
            'description' => 'patient logged a new activity',
            'message_type' => 3
        )
    )

   private function changeMessage ($message_name) { 
        $system_data[87]['message'] = "{$message_name} logged a new activity.";
   }
}

【讨论】:

  • +1,因为我知道当我声明了正确的变量时(稍后在我的脚本中,编译后),我可以重新实例化字符串,但考虑到我注入字符串的变量可能不同,根据消息,我无法承受任何静态执行。我的第一个想法是用 refresh() 函数替换您的 changeMes​​sage,该函数通过每条消息推送一组变量,但同一消息可能用于两个不同的实例(具有两个不同的名称),所以我需要维护一个模板的消息。我会添加我的解决方案,告诉我你的想法。
【解决方案2】:

在 MikeB 和 Zgr024 的提示下,这就是我的想法(不是最好的解决方案,但可以工作并保持我的脚本所需的灵活性和动态性):

class Log_model extends CI_Model {
    const SUPERVISOR_PROGRAM_UPDATED = 87;

    private static $system_data = array(
        87 => array(
            'message' => "{$message_name} logged a new activity.",
            'description' => 'patient logged a new activity',
            'message_type' => 3
        )
    )

    /*data is a set of values (key->value) to be injected into the string (included and retrieved depending on the log_type_id needed when calling this function)*/
    public function generate_message($log_type_id = FALSE, $data = array()){
    $message = self::$system_data [$log_type_id]['message'];
    foreach($data as $key=>$value){
    $message = str_replace("{%".$key."%}", $value, $message, $i);
    }

    return $message;
}

}

【讨论】:

  • 我本来打算将变量或整个数组作为参数注入到我之前编写的 changeMes​​sage 函数下,但您似乎已经弄清楚了。
猜你喜欢
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 2018-01-08
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多