V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
OnlyBlue
V2EX  ›  PHP

一个面向对象的小问题

  •  
  •   OnlyBlue · 2011-11-29 20:43:44 +08:00 · 5158 次点击
    这是一个创建于 4738 天前的主题,其中的信息可能已经有所发展或是发生改变。
    class A {
    ...
    $this->foo();
    ...
    }

    class B extends A {
    ...
    function foo(){
    ...
    }
    ...
    }

    就是说父类的对象可以调用子类中的方法吗?
    16 条回复    1970-01-01 08:00:00 +08:00
    francis
        1
    francis  
       2011-11-29 20:45:06 +08:00
    怎么可能?
    frittle
        2
    frittle  
       2011-11-29 21:16:03 +08:00
    不可以。子类可以调用父类中的方法,把$this->foot(); 和 function foo() {} 的位置对调就成立了。
    OnlyBlue
        3
    OnlyBlue  
    OP
       2011-11-29 21:50:42 +08:00
    @frittle 这个我知道,我就是想知道这样行不行,呵呵。
    Ricepig
        4
    Ricepig  
       2011-11-29 21:52:15 +08:00
    但是如果父类里有这个纯虚函数呢?这样就行了吗?
    yesmeck
        5
    yesmeck  
       2011-11-29 22:04:57 +08:00
    abstruct class A {

    public abstract public function foo() {}

    ...
    $this->foo();
    ...
    }

    class B extends A {
    ...
    function foo(){
    ...
    }
    ...
    }

    这样就比较好了
    yesmeck
        6
    yesmeck  
       2011-11-29 22:05:47 +08:00
    public abstract public function foo() {}
    额,多了个public
    yesmeck
        7
    yesmeck  
       2011-11-29 22:12:33 +08:00
    abstract public function foo();
    擦,这么写一句居然这么多错误。。。。没IDE还写不了代码了。。。。
    OnlyBlue
        8
    OnlyBlue  
    OP
       2011-11-29 22:21:31 +08:00
    @yesmeck abstract class能实例化吗?
    freefcw
        9
    freefcw  
       2011-11-29 22:49:25 +08:00
    虚类必然不能实例化。。。
    yesmeck
        10
    yesmeck  
       2011-11-29 23:05:40 +08:00
    同上,不能。。

    你们叫虚类感觉怪怪的。。。。
    yesmeck
        11
    yesmeck  
       2011-11-29 23:08:30 +08:00
    还有虚函数。。。。
    OnlyBlue
        12
    OnlyBlue  
    OP
       2011-11-30 11:03:59 +08:00
    @yesmeck 多谢,明白了。还有一个错误,abstruct,呵呵。
    darasion
        13
    darasion  
       2011-11-30 11:12:59 +08:00
    就是说父类对象不能调用子类中定义的方法。
    父类中定义的方法可以调用子类对象的方法。

    好像挺拗口。
    phay
        14
    phay  
       2011-11-30 11:29:10 +08:00
    如果你要实现的是template pattern。。当然是可以的,只不过静态语言要绕一点(比如区分virutal abstract之类的东西)动态语言一般不需要,比如python,直接像你那样写就行了
    laihj
        15
    laihj  
       2011-11-30 11:57:40 +08:00
    不太懂PHP的语法
    如果$this实例的话,在运行中它本身就是class B吧,只不过代码写在A中而已
    OnlyBlue
        16
    OnlyBlue  
    OP
       2011-11-30 13:05:51 +08:00
    @darasion 拗口没事,容我慢慢消化。
    @phay 我先学习一下template pattern,静态语言,动态语言等概念
    @laihj 没看懂,我再仔细琢磨一下。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3144 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:54 · PVG 21:54 · LAX 05:54 · JFK 08:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.