在项目开发中,为了程序的严谨安全,我们必须对对象进行检测,这边介绍几种检测对象的方法.
以鸟类为示例:
<?php
class Bird {
public function say()
{
echo 'my is Bird';
}
}
class Sparrow extends Bird {
public function say()
{
echo 'my is sparrow'."<br>";
}
}
class Phoenix extends Bird {
public function say()
{
echo 'my is phoenix'."<br>";
}
}
在这个示例中,我们申明了一个父类Bird,Sparrow和Phoenix都继承于Bird类.
下面我们看下检测对象的方法:
使用is_a()函数
代码示例:
$sparrow = new Sparrow;
$phoenix = new Phoenix;
if (is_a($sparrow,'Bird')) {
$sparrow->say();
}
if (is_a($sparrow,'Sparrow')) {
$sparrow->say();
}
var_dump(is_a($sparrow,'Bird'));
var_dump(is_a($sparrow,'Sparrow'));
结果:
my is sparrow
my is sparrow
boolean true
boolean true
由结果我们可以看出:is_a函数的作用就是 检测对象是否属于该类或该类是此对象的父类,是则返回 TRUE
使用get_class()函数
代码示例:
$sparrow = new Sparrow;
$phoenix = new Phoenix;
if (get_class($phoenix) == 'Phoenix') {
$phoenix->say();
}
if (get_class($phoenix) == 'Bird') {
$phoenix->say();
}
var_dump(get_class($phoenix));
结果:
my is phoenix
string 'Phoenix' (length=7)
由结果可以看出:get_class()函数是返回对象的类名,这方法只能检测对象所属的类,无法检测对象的父类
类似的方法还有:
* get_parent_class() -- 返回对象或类的父类名,get_parent_class(),参数为对象,返回对象的父类类名,参数若为字符串则返回以此字符串为名的类的父类名
* is_subclass_of() -- 如果此对象是该类的子类,则返回 TRUE
get_parent_class()示例:
$sparrow = new Sparrow;
$phoenix = new Phoenix;
if (get_parent_class($sparrow) == 'Bird') {
$sparrow->say();
}
if (get_parent_class('Sparrow') == 'Bird') {
$sparrow->say();
}
结果:
my is sparrow
my is sparrow
is_subclass_of()示例
$sparrow = new Sparrow;
$phoenix = new Phoenix;
if (is_subclass_of($sparrow,'Bird')) {
$sparrow->say();
}
结果:
my is sparrow
使用instanceof 关键字
instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例,结果为布尔值
代码示例:
$sparrow = new Sparrow;
$phoenix = new Phoenix;
if ($sparrow instanceof Bird) {
$sparrow->say();
}
if ($sparrow instanceof Sparrow) {
$sparrow->say();
}
结果:
my is sparrow
my is sparrow
结果可以看出,instanceof 可以用于检测变量是否是属于类,父类或者子类都可以检测.
除此之外,instanceof也可用于确定一个变量是不是实现了某个接口的对象的实例.
示例:
<?php
interface BirdInterface {
public function hasWing();
}
class Bird implements BirdInterface {
public function hasWing()
{
echo 'I has wing';
}
public function say()
{
echo 'my is Bird';
}
}
$bird = new Bird;
if ($bird instanceof BirdInterface) {
$bird->say();
$bird->hasWing();
}
结果:
my is BirdI has wing
g