我还在学习OOP所以这甚至不可能(虽然我会感到惊讶),我需要一些帮助调用另一个类方法。
例如ClassA I
中有这种方法:
function getName()
{
return $this->name;
}
现在来自ClassB
(不同的文件,但在同一目录中),我想致电ClassA
的{{1}},我该怎么做?我试着做一个getName()
,但这不起作用。
谢谢!
答案 0 :(得分:60)
//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();
?>
答案 1 :(得分:17)
如果它们是单独的类,您可以执行以下操作:
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
类,因为这意味着我将这两个类紧密结合在一起。这使得很难:
B
课程进行单元测试A
类替换为另一个类答案 2 :(得分:5)
您需要在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
。
答案 3 :(得分: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();