我有一个函数,有时不分配变量$infolasterroredu

在这些情况下,如果变量为not assignednull,我想告诉函数赋值"Hello".

我try 了这种方法,但当变量未赋值时,它会不断返回值"null".

我该如何设置默认值?

private static function stockstatus(Product $product, $infolasterroredu = 'Hello')
{
//my function code
}

调试时,此代码的结果为空,我做错了什么?

我这样调用函数

我知道可以这样解决

但是这需要编辑所有的函数调用,这是几个,所以我需要通过直接函数来完成.

Note:当我说直接函数时,它意味着直接将值放入私有静态函数中,而不是逐行编辑对函数的调用,这太多了.

推荐答案

在第二个参数上根本没有类型,这意味着任何东西都可以传递,但如果传递了nothing(甚至不是null),则为Hello.首先,如果可能的话,我会限制类型:

function stockstatus(Product $product, string $infolasterroredu = 'Hello') {}

如果传入''(空字符串),这并不能解决问题.您可以使用Hello中通过的调用端默认值"解决"这个问题(如果不存在):

stockstatus($product, $infolasterroredu ?: 'Hello')

我看到的问题是,它将函数的内部关注点交给了其他调用方,这使得在函数本身发生更改时调用更加脆弱.

相反,我会将其设置为允许空switch ,但需要字符串,并在内部默认:

function stockstatus(Product $product, ?string $infolasterroredu = null) {
    $infolasterroredu = $infolasterroredu ?: 'Hello';

    ...
}

我用?:来捕捉任何空值或null值,并将其默认为Hello.您可以在参数表达式的默认值中输入'Hello'(这可能有助于类型辅助).然而,如果有人不知道如何调用该函数,我更喜欢让他们阅读该函数,并且我不会重复实际的默认值两次(在参数default和内部判断中).

一个缺点是,如果你愿意的话,它接受任何真实的字符串,甚至是 ..处理此问题的最佳实践方法是使用在setter上进行验证的值对象(甚至是默认的非抛出异常)作为第二个参数.

Php相关问答推荐

无法添加ProxyClass__setInitialized()上的忽略

wp_enqueue_scripts not loading(基于类的插件)

在Laravel中修改JSON输出

SendGrid响应PHP

Apache只允许index.php-不从根目录工作

PHP根据特定索引值从中删除子数组

curl_close()未从PHP 8开始写入CURLOPT_COOKIEJAR会话文件

防止在WordPress短代码中显示重复产品并请求代码更正

使用 php Carbon 获取两个日期之间的随机日期和时间

显示 woocommerce 中所选变体的属性术语描述

根据小计向 WooCommerce Checkout 添加佣金

PHP访问子数组列表出错结果和长度

Woocommerce 相关产品按其类别或排名数学主要类别

PHP 简单 XML Xpath 上移树(带有名称的父级)

注册命名空间后如何获取xml node 值?

用于检测此模式的正则表达式:something;something=something,something=something... 未知次数

正则表达式抓取递归括号的内容

在 laravel 中更新表单时如何在 Select 选项中保留旧值?

Symfony 6 中的入口点 (public/index.php) - 它是如何工作的?

Laravel 响应 html 默认页面忽略控制器