39

私はまだ OOP を学んでいるので、これは不可能かもしれません (そうであれば驚くかもしれませんが)、別のクラス メソッドを呼び出す助けが必要です。

たとえば、次のClassA Iメソッドがあります。

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

(別のファイルですが、同じディレクトリにあります)からClassB、 の を呼び出したいClassAのですがgetName()、どうすればいいですか?私はただやろうとしましたinclude()が、うまくいきません。

ありがとう!

4

4 に答える 4

87
//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();
?>
于 2012-11-21T23:33:25.590 に答える
20

それらが別々のクラスである場合、次のようなことができます:

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。これは、2 つのクラスを緊密に結合することを意味するためです。これにより、次のことが困難になります。

  1. Bクラスの単体テスト
  2. Aクラスを別のクラスに交換する
于 2012-11-21T23:36:17.640 に答える
10

ClassB 内に ClassA のインスタンスを持つか、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必要です。

于 2012-11-21T23:33:00.880 に答える
0

ファイル 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();
于 2012-11-21T23:42:03.587 に答える