无法使用OOP调用另一个类的函数

时间:2016-01-29 16:31:47

标签: php

我对php有点生疏,我想知道如何调用loginclass2内可用的函数class1。这是一个例子:

<?php

    require_once("property2.php");

class Class1 
{
      public function __construct()
      {
         $cls2 = new Class2()
      }

      public function method1()
      {
          $cls2->login() //cl2 is undefined 
      }

} ..

//this is the function

...
class Class2
{
     public function __construct()
     {

     }

     //This is the  function to call

     public function login()
     {
       //Some stuff
     }
} ...

现在PHPSTORM表示变量cls2未定义。我做错了什么?

2 个答案:

答案 0 :(得分:3)

设置变量时,不要将其设置为类属性。在您的课程中定义private变量,&#34;设置它并使用$this关键字获取&#34;

class Class1 {
    private $cls2;

    public function __construct() {
        $this->cls2 = new Class2();
    }

    public function method1() {
        $this->cls2->login();
    }
}

实现此目的的另一种方法是使用 Inheritance ,其中一个类被视为&#34;父级&#34;类。您可以使用extends

来实现此目的
class Class1 {
    public function __construct() {
        //Some stuff
    }

    public function login() {
        //Some stuff
    }
}


class Class2 extends Class1 {
    public function __construct() {
        parent::__construct();
    }

    public function method1() {
        $this->login();
    }
}

答案 1 :(得分:2)

class Class1 
{
      public function __construct()
      {
         $cls2 = new Class2();
      }

      public function method1()
      {
          $cls2->login() //cl2 is undefined 
      }

}

创建Class1并调用$cls2 = new Class2();时,$cls2仅存在于本地。你必须使它成为一个类属性:

class Class1 
{

    public $cls2;

    public function __construct()
    {
       $this->cls2 = new Class2();
    }

    public function method1()
    {
        $this->cls2->login();
    }

}

然后您就可以使用$this关键字访问它了。

另请注意分号。