我仍然在學習OOP,所以這可能甚至不可能(儘管如果是這樣我會感到驚訝),我需要一些幫助來調用另一個類的方法。PHP:調用另一個類的方法
例如在ClassA I
有這樣的方法:
function getName()
{
return $this->name;
}
現在
從ClassB
(不同的文件,但在同一目錄下),我想打電話給ClassA
的getName()
,我該怎麼做呢?我試圖做一個include()
但這不起作用。
謝謝!
我仍然在學習OOP,所以這可能甚至不可能(儘管如果是這樣我會感到驚訝),我需要一些幫助來調用另一個類的方法。PHP:調用另一個類的方法
例如在ClassA I
有這樣的方法:
function getName()
{
return $this->name;
}
現在
從ClassB
(不同的文件,但在同一目錄下),我想打電話給ClassA
的getName()
,我該怎麼做呢?我試圖做一個include()
但這不起作用。
謝謝!
//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();
?>
你需要有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
。
如果它們是不同的類,你可以做類似如下:
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
可以使用$this->a
訪問A
類的所有公共成員。
另請注意,我沒有在B
類中實例化A
類,因爲這意味着我會緊緊地將兩個類耦合在一起。這使得它很難:
B
類A
類另一類這個也不錯,但你指定了兩個不同的文件。所以你只需要記住要包含你想用「new B()」實例化的類,等等。 –
我更多地閱讀了這個問題,我怎樣才能訪問另一個類的成員,而不是如何包含一個文件,但是你是對的。儘管自動加載文件是每個人都應該爲了方便imho而做的。 – PeeHaa
是的。雖然在這個階段,我認爲自動加載可能會使學習過程超載......也許。 –
文件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();
請參閱@我的評論](http://stackoverflow.com/questions/13503734/php-calling-another-class-method/13503805#comment18482402_13503769)在@codingbiz的答案。 – PeeHaa
分享代碼你正在使用調用getName() – Evert
類B是否與類A有任何關係(如分層)?如果是這樣,B類可以擴展A類,你將可以訪問A類的功能。如果不是,你可以再描述一下你的兩個對象(他們代表什麼)。 – Mike
事情是,A類已經擴展了另一個類(我從網上下載的simple_html_dom),所以我不想(甚至不知道我是否可以)擴展已經擴展了其他類的類A – Ryan