PHP5多态性与动态绑定方法
admin
2023-06-28 14:24:25
0

     PHP5多态性与动态绑定方法
    多态性是继数据抽象和继承后,面向对象语言的第三个特征。从字面上理解,多态的意思是“多种形态”,简单来说,多态是具有表现多种形态的能力的特征,在OO中是指“语言具有根据对象的类型以不同方式处理之,特别是重载方法和继承类这种形式”的能力。多态被认为是面向对象语言的必备特性。

例如:

    创建一个接口 Shape,定义一个空的方法 draw(),那么所有的实现类都必须实现这个方法,假设 Shape 有两个实现类:Triangle 和 Rectangle,我们虽然无法通过类似这样的 Java 代码来诠释 PHP 的多态性:

Shape s = new Triangle();

s.draw();


class TestPolymorphism {

    public function drawNow(Shape $shape) {
        $shape->draw();
    }
}//codego.net


    函数 drawNow() 中限制传入的参数类型必须为 Shape 接口派生类的对象,这里我们传递给 drawNow() 的参数可能是 Triangle 或者 Rectangle 的对象,也可能是其它的 Shape 接口的派生类对象,比如 Circle 等等,简单的说 drawNow() 的参数类型是无法预知的,$shape->draw() 的行为最终由传入的参数的具体类型来决定,比如如果传入 Triangle 的对象,那么就调用 Triangle 的 draw() 方法,如果传入 Rectangle 的对象,就调用 Rectangle 的 draw() 方法。这种在运行时刻根据传递的对象参数的类型来决定调用哪一个对象的方法的行为就可以称之为多态。


Shape 也可以是一个抽象基类或者是非抽象的基类,上面的论述都是成立的。区别在于接口仅定义一套实现类必须遵守的规则,而使用基类则可以为派生类提供一些缺省的行为。


/**
 * Shape Interface
 *
 * @version 1.0
 * @copyright
 */
interface Shape {
    public function draw();
}
 
/**
 * Triangle
 *
 * @uses Shape
 * @version 1.0
 * @copyright
 */
class Triangle implements Shape {  
    public function draw() {
        print "Triangle::draw()\n";
    }
}
 
/**
 * Rectangle
 *
 * @uses Shape
 * @version 1.0
 * @copyright
 */
class Rectangle implements Shape {
    public function draw() {
        print "Rectangle::draw()\n";
    }
}
 
/**
 * Test Polymorphism
 *
 * @version 1.0
 * @copyright
 */
class TestPoly {
    public function drawNow(Shape $shape) {
        $shape->draw();
    }
}
 
 
$test = new TestPoly();
$test->drawNow(new Triangle());
$test->drawNow(new Rectangle());
 
/* vim: set expandtab tabstop=4 shiftwidth=4: */


什么是动态绑定?

HaoHappy 翻译的 PHP5 Object Pattern 第九节中有介绍:

除了限制访问,访问方式也决定哪个方法将被子类调用或哪个属性将被子类访问。 函数调用与函数本身的关联,以及成员访问与变量内存地址间的关系,称为绑定。


相关内容

热门资讯

绿色算力全栈AI平台在呼和浩特...   新华社呼和浩特5月30日电(记者侯维轶)30日,绿色算力全栈AI平台——内蒙古词元交易平台在内蒙...
北京太空智算研究院在北京亦庄成... 红星资本局5月30日消息,近日,北京太空智算研究院在北京经济技术开发区(简称“北京经开区”,又称“北...
第二届西部医学科技创新学术大会... 封面新闻记者 邱添 2026年5月30日,在第十个全国科技工作者日来临之际,一场汇聚医学前沿智慧与创...
地博光电取得存储自动化料库专利... 国家知识产权局信息显示,昆山地博光电材料有限公司取得一项名为“一种存储自动化料库”的专利,授权公告号...
香港政务司司长谈黎家盈:香港由... 据凤凰卫视报道,首位来自香港的载荷专家黎家盈早前随神舟二十三号载人飞船升空。香港政务司司长陈国基表示...
亚美尼亚大选在即,俄方突然召回... 【文/观察者网 阮佳琪】当地时间周五(5月29日),在哈萨克斯坦首都阿斯塔纳,亚美尼亚由副总理格里戈...
财政部在香港发行60亿元人民币... 新华社北京5月30日电 《中国证券报》30日刊发文章《财政部在香港发行60亿元人民币绿色主权债券》。...
原创 追... 2026年5月30日是全国科技工作者日。在吉林省长春市王大珩故居前,这位中国光学事业奠基人的新雕像揭...
京东618独家首发欧姆龙血糖尿... 当前,国民居家慢病管理意识持续增强,血糖、尿酸等健康指标的常态化监测,早已成为家庭健康管理的刚需。5...
华为申请天线旋转调整波束角度专... 国家知识产权局信息显示,华为技术有限公司申请一项名为“天线、通信设备以及通信系统”的专利,公开号CN...