如果参数不正确,则停止实例化类

时间:2012-07-12 12:56:05

标签: php class

是否可以创建一个像这样的PHP类:

class Foo
{
    function __construct($param)
    {
        if (!is_numeric($param))
        {
            // stop class
        }
    }
}

$a = new Foo(2);
$b = new Foo('test');

var_dump($a);
var_dump($b);

将返回

object(Foo)[1]
null

5 个答案:

答案 0 :(得分:5)

我知道停止创建新对象而不立即终止脚本的唯一方法是抛出异常:

class Foo {
    public function __construct($param) {
        if (!is_numeric($param)) {
            throw new \InvalidArgumentException('Param is not numeric');
        }
    ...
}

当然,您必须确保并在调用代码中捕获异常并正确处理问题。

答案 1 :(得分:2)

创建一个返回新实例的static create($param),如果$param无效,则创建为null。您还可以考虑使用例外。

答案 2 :(得分:1)

您可以尝试抛出异常并从与变量声明相同范围内的另一个函数中捕获它:

class Foo
{
    function __construct($param)
    {

        if( !is_numeric($param) )
            return true;
        else
            throw new Exception();

    }


}

function createFooObject($v){
    try{ $x = new Foo($v); return $x; }
    catch(Exception $e){
        unset($x);
    }
}

$a = createFooObject(2);
$b = createFooObject('test');



var_dump($a);
var_dump($b);

答案 3 :(得分:-3)

如果参数不是数字,只需返回null

<?php

    class Foo{

       public function __construct($param = null){
          if( !is_numeric($param) ){
             return null;
          }
       }

    }

?>

答案 4 :(得分:-3)

就像你拥有它一样:

<?
public class newClass {

    public __CONSTRUCT($param = false){

        if(!is_numeric($param)){
            return false
        }

    }

}

$class = new newClass(1);
if($class){
    //success / is a number
}else{
    // fail, not a number, so remove the instance of the class
    unset($class);
}
?>

在构造函数的参数内设置$param = false将告诉脚本如果没有输入则将其设置为false