2016-01-29 3 views
1

Я немного ржавый с php, я хочу знать, как я могу назвать функцию login, доступную в class2, внутри class1. Это пример:Невозможно вызвать функцию другого класса с помощью OOP

<?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 не определена. Что я сделал не так?

+0

Должно быть '$ this-> cls2' –

+1

Что делает' Class1'? – AbraCadaver

+0

@u_mulder Я попытался в 'method1' как' $ this-> cls2-> login() ', но я получаю эту ошибку на вкладке сети: Undefined property: Class1 :: $ cls2 in ... строка, которую я показал ранее – Sandokan

ответ

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 ключевого слова.

Также обратите внимание на точки с запятой.

+0

О, ладно, я понял сейчас. Благодаря :) – Sandokan

3

Когда вы устанавливаете свою переменную, вы не устанавливаете ее как свойство класса. Определите переменную private внутри вашего класса, и «установите ее и получите», используя ключевое слово $this.

class Class1 { 
    private $cls2; 

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

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

Другой способ для достижения этой цели является использование Inheritance, где один класс считается класс «родитель». Вы бы добиться этого с помощью 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(); 
    } 
} 
Смежные вопросы