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 に答える