39

我仍在学习 OOP,所以这甚至可能是不可能的(尽管如果这样我会感到惊讶),我需要一些帮助来调用另一个类方法。

例如在ClassA I有这个方法:

function getName()
{
    return $this->name;
}

现在从ClassB(不同的文件,但在同一个目录中),我想调用ClassA's getName(),我该怎么做?我试着做一个,include()但这不起作用。

谢谢!

4

4 回答 4

87
//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();
?>
于 2012-11-21T23:33:25.590 回答
20

如果它们是单独的类,您可以执行以下操作:

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因为这意味着我将这两个类紧密结合。这使得很难:

  1. 单元测试你的B班级
  2. 将课程换成A另一个课程
于 2012-11-21T23:36:17.640 回答
10

您需要在 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都需要。

于 2012-11-21T23:33:00.880 回答
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();
于 2012-11-21T23:42:03.587 回答