【问题标题】:PHP/Laravel Check a condition in a function only oncePHP/Laravel 只检查一次函数中的条件
【发布时间】:2020-03-22 02:31:21
【问题描述】:

我为 Laravel 写了一个自定义翻译函数,它首先检查一个配置变量,看是使用 Laravel 的默认 __() 函数还是我自定义的 trans() 函数。

这是我的功能:

function t($key, $replace = [], $locale = null)
{
    $source = Config::get('translate.source');
    if ($source == 'database') {
        return trans($key, $replace, $locale);
    } else {
        return __($key, $replace, $locale);
    }
}

但是,出于速度目的,我不希望 if 条件运行到达时间我调用 t() 函数,但仅在第一次调用时。

有什么想法吗?

【问题讨论】:

  • 这只是一个字符串比较,它几乎不会改变性能
  • 你的问题没有意义。如果 if 语句从未运行过,那么你怎么知道你是要调用 __ 还是 trans?
  • 如果您不想每次都检查源代码,请将有效的函数名称存储在缓存、会话等中,或者创建一个类并使用 __construct。但是,除非您进行数百万次翻译,否则任何解决方案都不会为您带来任何性能。

标签: php laravel function laravel-5 lumen


【解决方案1】:

您想在类中设置一个变量并引用它。所以,创建一个变量databaseSource:

private $databaseSource = false;

然后你想要一个改变布尔值的方法:

function updateSource()
{
    $source = Config::get('translate.source');
    if ($source == 'database') {
        $this->databaseSource = true;
    }

    $this->databaseSource = false;
}

然后,您可以通过访问变量来反复使用此功能,而不是每次需要时都获取源代码。

例如if ($databaseSource) { ... }

【讨论】:

    猜你喜欢
    • 2013-03-31
    • 1970-01-01
    • 2015-05-02
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 2012-12-01
    相关资源
    最近更新 更多