2014-02-24 34 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 ::方法也不是靜態的。 –