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!
//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();
?>
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:
B
A
contre une autre classeFichier 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();