web-dev-qa-db-fra.com

PHP: Appeler la méthode d'une autre classe

J'apprends toujours OOP, donc cela pourrait même ne pas être possible (bien que je serais surpris si c'est le cas), j'ai besoin d'aide pour appeler une autre méthode de classe.

Par exemple, dans ClassA I ont cette méthode:

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

maintenant de ClassB (fichier différent, mais dans le même répertoire), je souhaite appeler ClassA 'getName(), comment puis-je le faire? J'ai essayé de faire un include() mais cela ne fonctionne pas.

Merci!

24
Ryan
//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();
?>
55
codingbiz

Si ce sont des classes séparées, vous pouvez faire quelque chose comme ceci:

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();

Ce que j'ai fait dans cet exemple, c'est tout d'abord créer une nouvelle instance de la classe A. Et après cela, j'ai créé une nouvelle instance de la classe B à laquelle je passe l'instance de A dans le constructeur. Désormais, B peut accéder à tous les membres publics de la classe A à l'aide de $this->a.

Notez également que je n'instancie pas la classe A dans la classe B car cela voudrait dire que je couplerais étroitement les deux classes. Cela rend difficile de:

  1. testez votre classe B
  2. échanger la classe A contre une autre classe
15
PeeHaa

Fichier 1

class ClassA {

    public $name = 'A';

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

}

Fichier 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();
0
martin-lundberg