ООП Метод переопределения - PullRequest
0 голосов
/ 13 октября 2018

Есть ли способ получить возвращаемое значение метода foo в родительском классе?В приведенном ниже коде я получаю «b», моя цель - получить «a» без изменения имен методов и без использования return (new a () -> foo ());

interface i {
      function foo();
    }

    class a implements i {
      public function foo() {
        return 'a';
      }

      public function foo1() {
       // return (new a()->foo()); 
        return $this->foo();
      }
    }

    class b extends a  {
      public function get() {
        return parent::foo1();
      }

      public function foo() {
        return 'b';
      }
    }

    $b=new b();
    $b->get(); //return b

Обновление: цель - получить доступ к методу foo вродительский класс из другого третьего класса, например

    class c {
      public function __construct(i $b)
  {
    $this->b = $b;
  }

public function get() {
  $this->b->foo1();
}
    }

Ответы [ 4 ]

0 голосов
/ 13 октября 2018

вызовите parent::foo() внутри вашего подкласса, чтобы иметь прямой доступ к родительскому методу foo ()!

0 голосов
/ 13 октября 2018

вместо вызова

public function get() {
    return parent::foo1();
}

вызовите метод foo, используя следующий родительский элемент

public function get() {
    return parent::foo();
}

, и в результате вы получите a

0 голосов
/ 13 октября 2018

Я не уверен - как @arkascha - какова реальная цель.Вот еще одна возможность, которая может иметь в виду (с явным использованием метода foo1):

<?php

interface i {
  function foo();
}

class a implements i {
  public function foo() {
    return 'a';
  }

  public function foo1() {
   // here the 'self' is the trick instead of $this (and the only change to your code)
      return self::foo();
  }
}

class b extends a  {
  public function get() {
    return parent::foo1();
  }

  public function foo() {
      return parent::foo();
  }
}

$b=new b();
echo $b->get(); //returns a
0 голосов
/ 13 октября 2018

Вы спрашиваете, возможно ли получить возвращаемое значение a::foo(), то есть 'a', вызывая метод объекта типа b.Это должно быть довольно просто, если только я совершенно не понимаю, что вы пытаетесь сделать:

<?php
interface i {
    function foo();
}

class a implements i {
    public function foo() {
        return 'a';
    }
}

class b extends a {
    public function get() {
        return parent::foo();
    }

    public function foo() {
        return 'b';
    }

}

$b = new b;
echo $b->get(); // obviously returns 'a'

Это потому, что вы явно звоните parent::foo(), что, очевидно, разрешается до a::foo(),

...