前言:
今天在撸框架时有个假设性问题,如果用户不想使用系统框架给的配置值时,需要自己设置,那该如何处理,格式又是如何,带着这个问题开发时遇到了定界符使用的一些注意事项:
问题剖析:
开发环境的代码(错误代码)
private static function _init()
{
//1、加载系统配置项
C(include CONFIG_PATH . "/config.php");
//2、加载用户配置项
//先判断文件是否存在
$userpath = APP_CONFIG_PATH . "/config.php";
#问题在此处开始
$userConfigContent = <<< str
return [
//配置项 => 配置的值
];
str;
is_file($userpath) || file_put_contents($userpath, $userConfigContent);
C(include $userpath);
}
生产环境的代码(正确代码)
private static function _init()
{
//1、加载系统配置项
C(include CONFIG_PATH . "/config.php");
//2、加载用户配置项
//先判断文件是否存在
$userpath = APP_CONFIG_PATH . "/config.php";
#问题在下方开始
$userConfigContent = <<< str
return [
//配置项 => 配置的值
];
str;
is_file($userpath) || file_put_contents($userpath, $userConfigContent);
C(include $userpath);
}
对比上面的两段代码,其实并无字数的多少,可以说是一模一样,那为什么第一段错误呢,其实问题在于语法上的错误,定界符开始时后面不得有空格或者其他字符,结束时必须必须顶头,也不可有其他返回字符
语法:
$str = <<
大量的字符串
EOF; //必须是顶头的,不能有返回的字符
后话
其实出现这个问题的朋友,一般都是完美主义者,上上下下左左右右都对齐的时候,突然出现一个不协调的东西,真的很难受,包括作者本人也是,看了几次,感觉代码很奇怪,可是语法就是这样,有什么办法呢,如果你有其它更好的解决办法,也可以告诉我哦