PHP: вызов метода другого класса
Я все еще изучаю ООП, поэтому это может быть даже не возможно (хотя я был бы удивлен, если бы так), мне нужна помощь в вызове метода других классов.
Например, в ClassA I
есть этот метод:
function getName()
{
return $this->name;
}
теперь из ClassB
(другой файл, но в том же каталоге), я хочу вызвать ClassA
getName()
, как это сделать? Я попытался просто выполнить include()
, но это не сработает.
Спасибо!
Ответы
Ответ 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();