instanceof 运算符是 PHP 5 引进的。在此之前用 is_a(),但是 is_a() 已经过时了,最好用 instanceof。
例子一:
<?php
class A { }
class B { }
$thing = new A;
if ($thing instanceof A) {
echo 'A';
}
if ($thing instanceof B) {
echo 'B';
}
?>
显示:A
例子二:
显示:AB
参看下面代码用到上面的例子二在: foreach($myCollection as $s) ----》 if($s instanceof Shape) //如果$s是Shape类的实例
解释:
Shape:有一个取得面积的虚方法getArea,Polygon在继承了Shape的取得面积方法后添加了一个取得边数的方法getNumberOfSides,在下面的三角形四边形等都有边,继承重写Polygon(有边有面积),而圆形circle则只能是有面积没有几条边,直接继承了Shape和它的虚方法getArea,然后重写这个圆的面积计算方法。
例子一:
<?php
class A { }
class B { }
$thing = new A;
if ($thing instanceof A) {
echo 'A';
}
if ($thing instanceof B) {
echo 'B';
}
?>
显示:A
例子二:
<?php
abstract class A { }
abstract class B extends A{ }
class C extends B{}
$thing = new C;
if ($thing instanceof A) {
echo 'A';
}
if ($thing instanceof B) {
echo 'B';
}
?>
abstract class A { }
abstract class B extends A{ }
class C extends B{}
$thing = new C;
if ($thing instanceof A) {
echo 'A';
}
if ($thing instanceof B) {
echo 'B';
}
?>
显示:AB
参看下面代码用到上面的例子二在: foreach($myCollection as $s) ----》 if($s instanceof Shape) //如果$s是Shape类的实例
<?php
//abstract root class 抽象根类
abstract class Shape
{
abstract function getArea(); //定义一个抽象方法
}
//abstract child class 抽象子类
abstract class Polygon extends Shape //多边形
{
abstract function getNumberOfSides();
}
//concrete class 实体类 三角形类
class Triangle extends Polygon
{
public $base;
public $height;
public function getArea() //覆写计算面积方法
{
return(($this->base * $this->height)/2);
}
public function getNumberOfSides() //覆写边数统计方法
{
return(3);
}
}
//concrete class 实体类四边形
class Rectangle extends Polygon
{
public $width;
public $height;
public function getArea()
{
return($this->width * $this->height);
}
public function getNumberOfSides()
{
return(4);
}
}
//concrete class 实体类 圆形
class Circle extends Shape
{
public $radius;
public function getArea()
{
return(pi() * $this->radius * $this->radius);
}
}
//concrete root class 定义一个颜色类
class Color
{
public $name;
}
$myCollection = array(); //建立形状的集合,放入数组
//make a rectangle
$r = new Rectangle;
$r->width = 5;
$r->height = 7;
$myCollection[] = $r;
unset($r);
//make a triangle
$t = new Triangle;
$t->base = 4;
$t->height = 5;
$myCollection[] = $t;
unset($t);
//make a circle
$c = new Circle;
$c->radius = 3;
$myCollection[] = $c;
unset($c);
//make a color
$c = new Color;
$c->name = "blue";
$myCollection[] = $c;
unset($c);
foreach($myCollection as $s)
{
if($s instanceof Shape) //如果$s是Shape类的实例
{
print("Area: " . $s->getArea() .
"<br>\n");
}
if($s instanceof Polygon)
{
print("Sides: " .
$s->getNumberOfSides() .
"<br>\n");
}
if($s instanceof Color)
{
print("Color: $s->name<br>\n");
}
print("<br>\n");
}
?>
//abstract root class 抽象根类
abstract class Shape
{
abstract function getArea(); //定义一个抽象方法
}
//abstract child class 抽象子类
abstract class Polygon extends Shape //多边形
{
abstract function getNumberOfSides();
}
//concrete class 实体类 三角形类
class Triangle extends Polygon
{
public $base;
public $height;
public function getArea() //覆写计算面积方法
{
return(($this->base * $this->height)/2);
}
public function getNumberOfSides() //覆写边数统计方法
{
return(3);
}
}
//concrete class 实体类四边形
class Rectangle extends Polygon
{
public $width;
public $height;
public function getArea()
{
return($this->width * $this->height);
}
public function getNumberOfSides()
{
return(4);
}
}
//concrete class 实体类 圆形
class Circle extends Shape
{
public $radius;
public function getArea()
{
return(pi() * $this->radius * $this->radius);
}
}
//concrete root class 定义一个颜色类
class Color
{
public $name;
}
$myCollection = array(); //建立形状的集合,放入数组
//make a rectangle
$r = new Rectangle;
$r->width = 5;
$r->height = 7;
$myCollection[] = $r;
unset($r);
//make a triangle
$t = new Triangle;
$t->base = 4;
$t->height = 5;
$myCollection[] = $t;
unset($t);
//make a circle
$c = new Circle;
$c->radius = 3;
$myCollection[] = $c;
unset($c);
//make a color
$c = new Color;
$c->name = "blue";
$myCollection[] = $c;
unset($c);
foreach($myCollection as $s)
{
if($s instanceof Shape) //如果$s是Shape类的实例
{
print("Area: " . $s->getArea() .
"<br>\n");
}
if($s instanceof Polygon)
{
print("Sides: " .
$s->getNumberOfSides() .
"<br>\n");
}
if($s instanceof Color)
{
print("Color: $s->name<br>\n");
}
print("<br>\n");
}
?>
解释:
Shape:有一个取得面积的虚方法getArea,Polygon在继承了Shape的取得面积方法后添加了一个取得边数的方法getNumberOfSides,在下面的三角形四边形等都有边,继承重写Polygon(有边有面积),而圆形circle则只能是有面积没有几条边,直接继承了Shape和它的虚方法getArea,然后重写这个圆的面积计算方法。
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/1589/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jackxiang 编辑于2009-1-11 11:02
评论列表