OnlyBlue
V2EX  ›  PHP

一个面向对象的小问题

  •  
  •   OnlyBlue · Nov 29, 2011 · 6586 views
    This topic created in 5452 days ago, the information mentioned may be changed or developed.
    class A {
    ...
    $this->foo();
    ...
    }

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

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

    public abstract public function foo() {}

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

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

    这样就比较好了
    yesmeck
    yesmeck
    Nov 29, 2011
    6
    public abstract public function foo() {}
    额,多了个public
    yesmeck
    yesmeck
    Nov 29, 2011
    7
    abstract public function foo();
    擦,这么写一句居然这么多错误。。。。没IDE还写不了代码了。。。。
    OnlyBlue
    OnlyBlue
    OP
    Nov 29, 2011
    8
    @yesmeck abstract class能实例化吗?
    freefcw
    freefcw
    Nov 29, 2011
    9
    虚类必然不能实例化。。。
    yesmeck
    yesmeck
    Nov 29, 2011
    10
    同上,不能。。

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

    好像挺拗口。
    phay
    phay
    Nov 30, 2011
    14
    如果你要实现的是template pattern。。当然是可以的,只不过静态语言要绕一点(比如区分virutal abstract之类的东西)动态语言一般不需要,比如python,直接像你那样写就行了
    laihj
    laihj
    Nov 30, 2011
    15
    不太懂PHP的语法
    如果$this实例的话,在运行中它本身就是class B吧,只不过代码写在A中而已
    OnlyBlue
    OnlyBlue
    OP
    Nov 30, 2011
    16
    @darasion 拗口没事,容我慢慢消化。
    @phay 我先学习一下template pattern,静态语言,动态语言等概念
    @laihj 没看懂,我再仔细琢磨一下。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4962 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 09:11 · PVG 17:11 · LAX 01:11 · JFK 04:11
    ♥ Do have faith in what you're doing.