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