2014-02-24 37 views
0

Supose我有这个类静态声明probem与父母

<?php 
class Grandparent { 
    public function myMethod($param) { 
     //do something 
    } 
} 
class Parent extends Grandparent { 
    public function myMethod($param) { 
     //do something 
     return parent::myMethod($param) ; 
    } 
} 
class Son extents Parent { 
    public function myMethod($param) { 
     //do something 
     //code to access parent parent 
    } 
} 
?> 

我想在儿子类的myMethod的避免叫他的父母和上网本的祖父母。我试过的代码是parent :: parent :: myMethod($ param),但是Ide引发了一个错误。通过父母外出途径以静态方式访问祖父母的方式是哪种?

有没有可能性?我知道有一些方法,如get_parent_class,但我不希望他们使用它。我需要静态调用。

回答

1

http://www.php.net/manual/ru/language.oop5.inheritance.php

<?php 
class foo 
{ 
    public function something() 
    { 
    echo __CLASS__; // foo 
    var_dump($this); 
    } 
} 

class foo_bar extends foo 
{ 
    public function something() 
    { 
    echo __CLASS__; // foo_bar 
    var_dump($this); 
    } 
} 

class foo_bar_baz extends foo_bar 
{ 
    public function something() 
    { 
    echo __CLASS__; // foo_bar_baz 
    var_dump($this); 
    } 

    public function call() 
    { 
    echo self::something(); // self 
    echo parent::something(); // parent 
    echo foo::something(); // grandparent 
    } 
} 

error_reporting(-1); 

$obj = new foo_bar_baz(); 
$obj->call(); 

// Output similar to: 
// foo_bar_baz 
// object(foo_bar_baz)[1] 
// foo_bar 
// object(foo_bar_baz)[1] 
// foo 
// object(foo_bar_baz)[1] 

?> 
+0

感谢你的回复。这就是我需要的。我从不尝试使用class_name ::方法,认为该方法不是静态的,但如果我认为,parent ::方法也不是静态的。 –