PHP instanceof运算符

PHP中使用instanceof运算符来确定对象是否是类的实例化实例。它非常易于使用,并且以与其他运算符相同的方式工作。这对于控制大型应用程序中的对象很有用,因为您可以在使用参数之前确保参数是对象的特定实例。让我们创建几个类作为示例。

class Shape

{

}

 

class Circle extends Shape

{

}

现在,要确定变量是否为Shape类的实例,请创建对象,然后在该对象上使用instanceof运算符。以下代码返回true。

$shape = new Shape();

var_dump($shape instanceof Shape); // 真的

请注意,上面的Circle类扩展了Shape类。instanceof运算符将同时使用该类的一个实例和父类。如果不小心,可能会导致应用程序中的错误。

$circle = new Circle();

 

var_dump($circle instanceof Shape); // 真的

var_dump($circle instanceof Circle); // 真的

也可以否定此运算符,以查看变量是否不是对象的实例。查看变量是否不是运算符的实例并尽早从函数返回false很有用。否定运算符将使您可以执行此操作,甚至可以引发异常。

有两种合法的方法可以否定instanceof运算符。通过将调用括在括号中,然后像这样否定它:

var_dump(!($shape instanceof Shape)); // false

或通过简单地将否定参数添加到变量中,如下所示:

var_dump(!$shape instanceof Shape); // false

有了这段代码,现在可以执行以下操作。

function doObject($param)

{

 if (!$param instanceof TheObject) {

  return false;

 }

 // rest of code here...

}

还有其他方法可以使用instanceof运算符,而不仅仅是使用类名。您可以在instanceof运算符的右侧使用两种其他类型的参数。首先是将类名定义为变量中的字符串,然后传递该变量。

$class = 'Circle';

var_dump($circle instanceof $class); // 真的

第二个是通过传递对象本身的实例。下面的示例创建两个对象,并将它们本质上进行比较。

$circle1 = 'Circle';

$circle2 = 'Circle';

var_dump($circle1 instanceof $circle2); // 真的

但是,有两种非常好的打破此功能的好方法,因此也可以破坏您的代码。第一种是通过传递一个字符串作为类名。这会导致解析错误。

var_dump($circle instanceof 'Circle');

第二种方法是将未设置的变量作为参数的右侧传递。这将导致致命错误,因为instanceof运算符需要有效的对象或字符串。

var_dump($notandobject instanceof $notavariable);

请注意,只要右侧包含所有重要的字符串或对象,运算符就可以在左侧接受一个未设置的变量。如您所料,这将返回false,因为该对象不是该类的实例。

var_dump($notandobject instanceof $shape); // false

以上是 PHP instanceof运算符 的全部内容, 来源链接: utcz.com/z/331903.html

回到顶部