如果程序员不';在PHP OOP中将参数传递给类方法?

如果程序员不';在PHP OOP中将参数传递给类方法?,php,methods,parameters,Php,Methods,Parameters,我需要知道我们是否必须在PHP OOP中检查类方法的输入参数? 例如,想象下面的方法: public function show_message($message) { echo $message; } 如果程序员不将消息参数传递给方法,那么最好的解决方案是什么?让PHP显示它的警告或运行时错误或执行其他操作?我认为错误的类型应该取决于函数的重要性,以及如果参数不存在,这是否足以作为停止执行的理由。我认为错误的类型应该取决于函数的重要性以及这是否足以作为停止执行的理由如果参数不存在,则停

我需要知道我们是否必须在PHP OOP中检查类方法的输入参数?
例如,想象下面的方法:

public function show_message($message)
{
   echo $message;
}

如果程序员不将消息参数传递给方法,那么最好的解决方案是什么?让PHP显示它的警告或运行时错误或执行其他操作?

我认为错误的类型应该取决于函数的重要性,以及如果参数不存在,这是否足以作为停止执行的理由。

我认为错误的类型应该取决于函数的重要性以及这是否足以作为停止执行的理由如果参数不存在,则停止执行。

允许使用默认值,然后捕获该默认值。这将控制您的操作,而不是简单的默认PHP行为

public function show_message($message = "\x00")
{
    if ($message === "\x00") {
        // decide how critical this argument actually is, and react appropriately
        throw new BadMethodCallException("The message argument is critical and must be passed to this method");
        // or simply apply a default if it isn't critical
        $message = 'Hello World';
    }
    echo $message;
}

允许一个默认值,然后捕获该默认值。这将控制您的操作,而不是简单的默认PHP行为

public function show_message($message = "\x00")
{
    if ($message === "\x00") {
        // decide how critical this argument actually is, and react appropriately
        throw new BadMethodCallException("The message argument is critical and must be passed to this method");
        // or simply apply a default if it isn't critical
        $message = 'Hello World';
    }
    echo $message;
}
“最佳”解决方案取决于您希望该方法确切执行的操作,但一般来说,我建议将类型提示和默认值结合使用:

class Foo
{
    public function doSomething ($message = 'None')
    {
        echo $message;
    }
    public function somethingElse (array $foo = array())
    {
        echo '<pre>';
        print_r($foo);
        echo '</pre>';//will always be an array
    }
    public function onlyMyself (Foo $instance)
    {
        return $instance->doSomething('I know this method exists');
    }
    public function myselfOrNothing(Foo $instance = null)
    {
        if ($instance === null)
        {
            return $this->doSomething('No instance provided');
        }
        return $instance->doSomething('Instance provided to '.__METHOD__);
    }
}
$foo = new Foo;
$bar = new Bar;
$foo->onlyMyself($bar);//works fine
$foo->onlyMyself(array());//fails
$bar->myselfOrNothing();//works
$bar->somethingElse();//ok...
“最佳”解决方案取决于您希望该方法确切执行的操作,但一般来说,我建议将类型提示和默认值结合使用:

class Foo
{
    public function doSomething ($message = 'None')
    {
        echo $message;
    }
    public function somethingElse (array $foo = array())
    {
        echo '<pre>';
        print_r($foo);
        echo '</pre>';//will always be an array
    }
    public function onlyMyself (Foo $instance)
    {
        return $instance->doSomething('I know this method exists');
    }
    public function myselfOrNothing(Foo $instance = null)
    {
        if ($instance === null)
        {
            return $this->doSomething('No instance provided');
        }
        return $instance->doSomething('Instance provided to '.__METHOD__);
    }
}
$foo = new Foo;
$bar = new Bar;
$foo->onlyMyself($bar);//works fine
$foo->onlyMyself(array());//fails
$bar->myselfOrNothing();//works
$bar->somethingElse();//ok...

如果您谈论的是输入参数验证。你可以这样做


如果您谈论的是输入参数验证。你可以这样做


我认为不可能把这类事情考虑进去。如果他通过一个数组呢?如果他传递了一个datetime对象呢?等等,等等,等等,我只是让PHP显示它的警告,不可能考虑所有的事情,除非这是一个字符串,因为你以后会将它插入数据库,或者我会对传递的假参数做些什么。这一切都取决于什么值​​是允许的。如果函数需要一个对象/数组并使用它,那么类必须抛出一个错误或异常。如果$message也是Ometibile,并且此行为不影响类的操作,则还可以设置默认值
show_message($message=null)
我认为不可能考虑到这类事情。如果他通过一个数组呢?如果他传递了一个datetime对象呢?等等,等等,等等,我只是让PHP显示它的警告,不可能考虑所有的事情,除非这是一个字符串,因为你以后会将它插入数据库,或者我会对传递的假参数做些什么。这一切都取决于什么值​​是允许的。如果函数需要一个对象/数组并使用它,那么类必须抛出一个错误或异常。如果$message也是Ometibile,并且此行为不影响类的操作,则还可以设置默认值
show_message($message=null)
“注意所有类都是stdClass类的子类”,你确定吗?@Laxus:你完全正确,PHP的stdClass是默认类,而不是基类。我已经编辑了我的答案,感谢你向我指出“注意所有类都是stdClass类的子类”,你确定吗?@Laxus:你完全正确,PHP的stdClass是默认类,而不是基类。我已经编辑了我的答案,谢谢你向我指出这一点