2

是否可以创建一个像这样运行的 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
4

5 回答 5

5

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

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

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

于 2012-07-12T12:57:55.500 回答
2

创建一个static create($param)返回新实例或 null 如果$param无效。您还可以考虑使用异常。

于 2012-07-12T12:58:55.713 回答
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);
于 2012-07-12T14:43:49.553 回答
-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

于 2012-07-12T13:06:57.770 回答
-3

null如果参数不是数字则返回:

<?php

    class Foo{

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

    }

?>
于 2012-07-12T13:02:53.053 回答