我仍在学习面向对象编程,所以这可能不可能实现(虽然如果是这样的话我会感到惊讶),我需要一些帮助来调用另一个类的方法。
例如,在ClassA I
中有这个方法:
function getName()
{
return $this->name;
}
现在我想从 ClassB
(不同的文件,但在同一个目录中)调用 ClassA
的 getName()
方法,我该怎么做呢?我尝试了使用 include()
,但那样并不起作用。
谢谢!
我仍在学习面向对象编程,所以这可能不可能实现(虽然如果是这样的话我会感到惊讶),我需要一些帮助来调用另一个类的方法。
例如,在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();
?>
B
类与 A
类密切耦合,因此现在无法轻松地对 B
类进行单元测试。 - PeeHaarequire_once
的路径在哪里?我有这样的情况,我推送一个对象数据,并且我将上传类分开。我该如何调用这两个?如果我 require_once[]..... /dbConnect.php
。 - RoCkDevstack如果它们是不同的类,你可以像下面这样做:
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
类进行单元测试
2. 替换 A
类为另一个类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'
。
文件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();