Подтвердить что ты не робот

PHP: вызов метода другого класса

Я все еще изучаю ООП, поэтому это может быть даже не возможно (хотя я был бы удивлен, если бы так), мне нужна помощь в вызове метода других классов.

Например, в ClassA I есть этот метод:

function getName()
{
    return $this->name;
}

теперь из ClassB (другой файл, но в том же каталоге), я хочу вызвать ClassA getName(), как это сделать? Я попытался просто выполнить include(), но это не сработает.

Спасибо!

4b9b3361

Ответ 1

//file1.php
<?php

class ClassA
{
   private $name = 'John';

   function getName()
   {
     return $this->name;
   }   
}
?>

//file2.php
<?php
   include ("file1.php");

   class ClassB
   {

     function __construct()
     {
     }

     function callA()
     {
       $classA = new ClassA();
       $name = $classA->getName();
       echo $name;    //Prints John
     }
   }

   $classb = new ClassB();
   $classb->callA();
?>

Ответ 2

Если это отдельные классы, вы можете сделать что-то вроде следующего:

class A
{
    private $name;

    public function __construct()
    {
        $this->name = 'Some Name';
    }

    public function getName()
    {
        return $this->name;
    }
}

class B
{
    private $a;

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

    function getNameOfA()
    {
        return $this->a->getName();
    }
}

$a = new A();
$b = new B($a);

$b->getNameOfA();

Что я сделал в этом примере, сначала создайте новый экземпляр класса A. И после этого я создал новый экземпляр класса B, которому я передаю экземпляр A в конструктор. Теперь B может получить доступ ко всем публичным членам класса A, используя $this->a.

Также обратите внимание, что я не создаю экземпляр класса A внутри класса B, потому что это означало бы, что я почти соединяю два класса. Это затрудняет:

  • unit test ваш B класс
  • замените класс A для другого класса

Ответ 3

Вам нужно будет иметь экземпляр класса ClassA в ClassB или иметь ClassB, наследующий ClassA

class ClassA {
    public function getName() {
      echo $this->name;
    }
}

class ClassB extends ClassA {
    public function getName() {
      parent::getName();
    }
}

Без метода наследования или экземпляра вам потребуется ClassA для статического метода

class ClassA {
  public static function getName() {
    echo "Rawkode";
  }
}

--- другой файл ---

echo ClassA::getName();

Если вы просто хотите вызвать метод из экземпляра класса:

class ClassA {
  public function getName() {
    echo "Rawkode";
  }
}

--- другой файл ---

$a = new ClassA();
echo $a->getName();

Независимо от выбранного вами решения требуется require 'ClassA.php.

Ответ 4

Файл 1

class ClassA {

    public $name = 'A';

    public function getName(){
        return $this->name;
    }

}

Файл 2

include("file1.php");
class ClassB {

    public $name = 'B';

    public function getName(){
        return $this->name;
    }

    public function callA(){
        $a = new ClassA();
        return $a->getName();
    }

    public static function callAStatic(){
        $a = new ClassA();
        return $a->getName();
    }

}

$b = new ClassB();
echo $b->callA();
echo $b->getName();
echo ClassB::callAStatic();