【问题标题】:Static declaration issue in YII with parentYII 中与父级的静态声明问题
【发布时间】:2014-02-24 15:38:34
【问题描述】:

假设我有这些课程

<?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,但我不希望他们使用它。我需要以静态方式调用。

【问题讨论】:

    标签: php yii static-methods


    【解决方案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]
    
    ?>
    

    【讨论】:

    • 感谢您的回复。那是我需要的吗。我从不尝试使用 class_name::method 认为该方法不是静态的,但如果我认为 parent::method 也不是静态的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多