如果未设置的参数是对象,如何使用默认值

Posted

技术标签:

【中文标题】如果未设置的参数是对象,如何使用默认值【英文标题】:How to use default value if unset parameter is an object 【发布时间】:2013-10-15 16:59:51 【问题描述】:

我需要构建一个将对象作为参数传递的方法。此方法使用 php "instanceof" 快捷方式。

//Class is setting a coordinate.
class PointCartesien 
    //PC props
    private $x;
    private $y;

    //Constructor
    public function __construct($x, $y) 
        $this->x = $x;
        $this->y = $y;
    

    //The method in question... It makes the coordinate rotate using (0,0) as default and $pc if set.
    //Rotation
    public function rotate($a, PointCartesien $pc) 
        //Without $pc, throws error if empty.
        if(!isset($pc)) 
            $a_rad = deg2rad($a);

            //Keep new variables
            $x = $this->x * cos($a_rad) - $this->y * sin($a_rad);
            $y = $this->x * sin($a_rad) - $this->y * cos($a_rad);

            //Switch the instance's variable
            $this->x = $x;
            $this->y = $y;
            return true;
         else 
            //...
        
    

使用 isset() 会引发错误。我希望它工作的方式是将 $pc 参数 rotate($a, PointCartesien $pc = SOMETHING) 默认设置为 (0,0) 。我该怎么做?

【问题讨论】:

$pc 在方法定义中没有默认值,所以它是必需的参数,在方法调用中不指定它只会是一个致命错误。尝试rotate($a, $pc = null),然后稍后进行显式isnull() 测试,并在必要时创建您的0,0 对象。 【参考方案1】:

您的函数调用需要$pc 参数,因此在您到达isset() 检查之前会出现错误。尝试public function rotate($a, PointCartesien $pc = null) ,然后使用is_null 支票代替isset

【讨论】:

以上是关于如果未设置的参数是对象,如何使用默认值的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 lambda 的默认参数值?

如何设置默认方法参数值? [复制]

Swift inout 如何在未更改时不复制回属性,以不触发对象设置器

如何使用 Access VBA 将具有默认值的未绑定文本框的值设置为空字符串

使用支持对象/结构的泛型时如何返回空值/默认值? [复制]

html5如何让边框发光