PHP - вызов метода из класса, в котором я создал свой объект - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть 2 класса, объявленных как в примере ниже.

class A{
   protected $process;

   public function __construct() {
      ......
      $this->process=new B();

   }

   public function do_something(){
     ....
   }

}

class B{
 // content not important
 // I need to call do_something from class A     

}

Мой вопрос: как я могу вызвать из класса B метод do_something() из класса A?Является ли это возможным?

Ответы [ 3 ]

0 голосов
/ 25 февраля 2019

Трудно дать совет о том, какой будет наилучший подход для вашего конкретного случая, так как мы не знаем, что делает A или B.

Есть несколько способов достичьэтот.Одним из способов было бы сделать B и расширение A - тем самым позволяя всем методам класса A быть вызываемыми для объекта B.Другой способ - создать новый объект A внутри B и вызвать этот метод.Или вы можете передать

Вот пример, где B расширяется от A. При этом все свойства и методы A можно вызывать для B, если они не перезаписаны в B.

class A {
    public function doSomething(){
        echo "doSomething() called in A";
    }

}
class B extends A {
    public function someMethod() {
        $this->doSomething();
    }
}

$b = new B();
$b->someMethod();

Приведенное выше вывело бы doSomething() called in A.

Или вы можете создать объект A и вызвать этот метод внутри B.

class B {
    public function someMethod() {
        $a = new A();
        $a->do_something();
    }
}
$b = new B();
$b->someMethod();
0 голосов
/ 28 февраля 2019

После прочтения всех ответов и проведения некоторых исследований я думаю, что лучшим способом для меня было использование признаков

. «Характеристики - это механизм повторного использования кода в языках с одним наследованием, таких как PHP.намеревался уменьшить некоторые ограничения одиночного наследования, позволяя разработчику свободно повторно использовать наборы методов в нескольких независимых классах, находящихся в разных иерархиях классов. "

Итак, я объявил Trait с методом do_something и вызвал этот метод из обоихкласс A и класс B

Спасибо

0 голосов
/ 25 февраля 2019

Из вашего примера невозможно, например, B узнать, что он создан и хранится экземпляром класса A.Вам нужно каким-то образом явно создать это соединение.

Я не думал, что это даже сработает, но, очевидно, вы можете передать экземпляр A в B до того, как A будет сделано с егоконструктор:

class A {
    protected $process;

    public function __construct() {
        $this->process = new B( $this );

    }

    public function do_something() {
        var_dump( 'do_something' );
    }

    public function test() {
        $this->process->test();
    }
}

class B {

    public function __construct( A $a ) {
        $this->a = $a;
    }

    public function test() {
        $this->a->do_something();
    }
}

$a = new A();

$a->test(); // do_something
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...