PHP:检查是否为null作为参数传递或分配为默认值

洛伦·麦克斯韦(Loren Maxwell):

我正在尝试编写我的对象成员,以便可以使用以下格式对其进行访问:

$object->member() // Returns current value of member
$object->member($new_value) // Sets value of member to $new_value

这是我的实现示例:

class Automobile
{
    private $color;
    private $make;
    private $model;

    public function __construct($inColor, $inMake, $inModel) {
        $this->color($inColor);
        $this->make($inMake);
        $this->model($inModel);
    }

    private function gset($p, $v) {
        if ($v) {
            $this->{$p} = $v;
            return $this;
        } else {
            return $this->{$p};
        }
    }

    public function color($v = null) {
        return $this->gset(__FUNCTION__, $v);
    }
    public function make($v = null) {
        return $this->gset(__FUNCTION__, $v);
    }
    public function model($v = null) {
        return $this->gset(__FUNCTION__, $v);
    }
}

我正在寻找的效果是:

$car = new Automobile('Red', 'Honda', 'Civic');

var_dump($car->color()); // Returns Red
$car->color('Blue'); // Sets color to Blue
var_dump($car->color()); // Returns Blue

一切都按原样运行,但是我仍然希望能够从字面上传递null给函数,以便它将null作为值插入,但是由于参数的默认值null也是,它将仅返回当前值:

$car->color(null); // Would like to insert null as car color, but this is obviously equivalent to $car->color()
var_dump($car->color()); // Returns Blue

无论如何,是否知道值是实际参数传递的结果还是使用默认值的结果?我认为我的第一个测试机会是在函数本身内部,到那时它已经被设置了。

关于如何实现我正在寻找的其他想法?

我意识到我可以null为特定的成员(如)编写一个单独的函数$car->null_color(),但此刻我正试图以某种方式将其压缩为相同的$object->member()格式。

拉菲克·法哈德(Rafik Farhad):

使用func_num_args()以确定是否有任何参数通过与否。

function color($c = null) {
    if(func_num_args() == 1) {
        $this->color = $c;
    }
    return $this->color;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

传递NULL时为参数分配默认值

为作为参数传递的TypeScript对象设置默认值

可以使用Optional.ofNullable检查是否为null并分配默认值

常规检查是否为null,而不是默认值(T)

Python-为作为函数其他参数的函数传递参数的默认值

检查结构的字段是否为空,然后为其分配默认值

将null传递给默认值为null的可选参数

为T:Float类型参数分配默认值

当参数为null时参数的默认值?

在 laravel 中为 NULL 变量正确分配默认值

Presto检查是否为NULL并返回默认值(NVL模拟)

如果prop参数为null,则使用默认值

默认值为null的Scala别名参数抛出NullPointerException

如果参数为null,则使用默认值

为通用类型分配默认值

为泛型分配默认值

为结构字段分配默认值

如何将 VPC 的 ID 作为参数传递给 Cluster.template 以设置为默认值?

Typescript为作为参数传递给另一个函数的函数设置默认值

检查文件(作为脚本的参数传递)是否为.iso类型

如何记录为参数默认值

检查变量是否为空,然后在javascript / jQuery中将长度设置为默认值0

注释默认值为“ null”

有什么办法可以区分Oracle中的“参数没有默认值”和“参数的默认值为null”

地图具有列表作为值检查是否为null

在F#中,是否可以将对可变的默认值的引用作为参数传递?

如果参数为null,如何检查是否为null,然后使用IS NULL检查值

将默认参数发送为null并使用函数中设置的默认值

为路由中的可选查询参数分配空默认值-Play框架