数码资讯
使用一个函数的require_once问题探索优雅的配置文件中定义的方法
背景 在项目中,很多人喜欢使用阵列的配置文件中配置的各种配置项,如层次结构level.config.php: 复制代码代码如下所示: < PHP g_levelconfig美元=阵列( 1= > 'novice, 2= > 'advanced, ); 因为一个项目的不同模块经常互相调用,所以会出现一
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
背景
在项目中,很多人喜欢使用阵列的配置文件中配置的各种配置项,如层次结构level.config.php:
复制代码代码如下所示:
< PHP
g_levelconfig美元=阵列(
1= > 'novice,
2= > 'advanced,
);
因为一个项目的不同模块经常互相调用,所以会出现一个文件的重复。为了避免错误,人们通常使用require_one,通常包括文件的功能,如:
复制代码代码如下所示:
功能getnamebyleval(元级){
水平= intval美元(美元的水平);
require_once config_path。'level。配置PHP的;
如果(!isset($ g_levelconfig { $级})){
返回false;
其他{ }
返回的g_levelconfig { $级};
}
}
问题
那有什么问题呢先看看下面的代码输出,level.config.php是上面提到的配置文件
复制代码代码如下所示:
< PHP
功能getnamebyleval(元级){
水平= intval美元(美元的水平);
require_once'level。配置PHP的;
如果(!isset($ g_levelconfig { $级})){
返回false;
其他{ }
返回的g_levelconfig { $级};
}
}
var_dump(getnamebyleval(1));
var_dump(getnamebyleval(2));
输出是:
复制代码代码如下所示:
字符串(6)新手
Bool(假)
很多人觉得很奇怪,为什么第二个输出是假的,其实很简单:
的require_once只包含一个文件,如果文件已经包含,它不会被再次列入。
1,这是第一次,当getnamebyleval(1)被执行死刑,因为level.config.php配置文件不包含以前的level.config.php文件编译和编译。在所有有功能g_levelconfig美元变量。
2、当执行getnamebyleval(1)的第二次,因为level.config.php配置文件已经包含之前,这一次不再收录,所以没有g_levelconfig美元变,这自然会返回FALSE。
和解条款
1。在全球的作用中纳入,参考作用。
复制代码代码如下所示:
< PHP
require_once'level。config. php; / /添加代码
功能getnamebyleval(元级){
全球g_levelconfig美元; / /添加代码
水平= intval美元(美元的水平);
如果(!isset($ g_levelconfig { $级})){
返回false;
其他{ }
返回的g_levelconfig { $级};
}
}
var_dump(getnamebyleval(1));
var_dump(getnamebyleval(2));
在这种情况下,无论getnamebyleval的使用功能,这level.config.php配置文件应包括,一点不划算。
2。包括和应用于功能
复制代码代码如下所示:
< PHP
功能getnamebyleval(元级){
水平= intval美元(美元的水平);
全球g_levelconfig美元; / /添加代码
require_once'level。配置PHP的;
如果(!isset($ g_levelconfig { $级})){
返回false;
其他{ }
返回的g_levelconfig { $级};
}
}
var_dump(getnamebyleval(1));
var_dump(getnamebyleval(2));
它也觉得不干净和美丽。
三.配置文件使用静态类
复制代码代码如下所示:
< PHP
类levelconfig {
公共静态级别=数组(
1= > 'novice,
2= > 'advanced,
);
}
当使用
复制代码代码如下所示:
功能getnamebyleval(元级){
水平= intval美元(美元的水平);
require_once'level。配置PHP的;
如果(!isset(levelconfig::$ { $级水平){ })
返回false;
其他{ }
返回levelconfig::{ }美元美元级水平;
}
}
我个人很欣赏定义一个优雅且不易覆盖变量的配置文件的方式。
在项目中,很多人喜欢使用阵列的配置文件中配置的各种配置项,如层次结构level.config.php:
复制代码代码如下所示:
< PHP
g_levelconfig美元=阵列(
1= > 'novice,
2= > 'advanced,
);
因为一个项目的不同模块经常互相调用,所以会出现一个文件的重复。为了避免错误,人们通常使用require_one,通常包括文件的功能,如:
复制代码代码如下所示:
功能getnamebyleval(元级){
水平= intval美元(美元的水平);
require_once config_path。'level。配置PHP的;
如果(!isset($ g_levelconfig { $级})){
返回false;
其他{ }
返回的g_levelconfig { $级};
}
}
问题
那有什么问题呢先看看下面的代码输出,level.config.php是上面提到的配置文件
复制代码代码如下所示:
< PHP
功能getnamebyleval(元级){
水平= intval美元(美元的水平);
require_once'level。配置PHP的;
如果(!isset($ g_levelconfig { $级})){
返回false;
其他{ }
返回的g_levelconfig { $级};
}
}
var_dump(getnamebyleval(1));
var_dump(getnamebyleval(2));
输出是:
复制代码代码如下所示:
字符串(6)新手
Bool(假)
很多人觉得很奇怪,为什么第二个输出是假的,其实很简单:
的require_once只包含一个文件,如果文件已经包含,它不会被再次列入。
1,这是第一次,当getnamebyleval(1)被执行死刑,因为level.config.php配置文件不包含以前的level.config.php文件编译和编译。在所有有功能g_levelconfig美元变量。
2、当执行getnamebyleval(1)的第二次,因为level.config.php配置文件已经包含之前,这一次不再收录,所以没有g_levelconfig美元变,这自然会返回FALSE。
和解条款
1。在全球的作用中纳入,参考作用。
复制代码代码如下所示:
< PHP
require_once'level。config. php; / /添加代码
功能getnamebyleval(元级){
全球g_levelconfig美元; / /添加代码
水平= intval美元(美元的水平);
如果(!isset($ g_levelconfig { $级})){
返回false;
其他{ }
返回的g_levelconfig { $级};
}
}
var_dump(getnamebyleval(1));
var_dump(getnamebyleval(2));
在这种情况下,无论getnamebyleval的使用功能,这level.config.php配置文件应包括,一点不划算。
2。包括和应用于功能
复制代码代码如下所示:
< PHP
功能getnamebyleval(元级){
水平= intval美元(美元的水平);
全球g_levelconfig美元; / /添加代码
require_once'level。配置PHP的;
如果(!isset($ g_levelconfig { $级})){
返回false;
其他{ }
返回的g_levelconfig { $级};
}
}
var_dump(getnamebyleval(1));
var_dump(getnamebyleval(2));
它也觉得不干净和美丽。
三.配置文件使用静态类
复制代码代码如下所示:
< PHP
类levelconfig {
公共静态级别=数组(
1= > 'novice,
2= > 'advanced,
);
}
当使用
复制代码代码如下所示:
功能getnamebyleval(元级){
水平= intval美元(美元的水平);
require_once'level。配置PHP的;
如果(!isset(levelconfig::$ { $级水平){ })
返回false;
其他{ }
返回levelconfig::{ }美元美元级水平;
}
}
我个人很欣赏定义一个优雅且不易覆盖变量的配置文件的方式。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。