PHP:另调用类的方法(PHP: Calling another class' method

2019-07-04 01:39发布

我仍然在学习OOP所以这可能甚至是不可能的(虽然我是,如果很惊讶),我需要一些帮助调用另一个类方法。

例如,在ClassA I有这样的方法:

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

现在从ClassB (不同的文件,但在同一目录下),我想打电话给ClassAgetName()我该怎么做呢? 我想只是一个include()但不工作。

谢谢!

Answer 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();
?>


Answer 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类,因为这将意味着我tighly夫妇两班。 这使得它很难:

  1. 单元测试你的B
  2. 掉出A类为其他类


Answer 3:

你需要有内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是必要的。



Answer 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();


文章来源: PHP: Calling another class' method
标签: php oop