Вызов функции класса ОДИН из класса ДВУХ без расширения? - PullRequest
2 голосов
/ 18 августа 2011

Если у меня есть два класса A, B и один не расширяет другой, они являются отдельными, но оба загружены в скрипт. Могу ли я ссылаться на функцию в A из B?

class A {
    function one() {
        echo "Class A";
    }
}

class B {
    function two() {
        echo "Class B";
        A::one();
    }
}


$a new A; 
$b = new B;

$b->two();

Ответы [ 3 ]

2 голосов
/ 18 августа 2011

На первый взгляд, да, вы можете сделать это. Тем не менее, функция one() в классе A должна быть объявлена ​​как static, чтобы ваша нотация вызовов работала. (Это делает метод класса .)

Другой вариант, предложенный последними строками в вашем коде, заключается в том, чтобы экземпляр $b вызывал функцию в экземпляре $a. Такие функции называются методами экземпляра и являются тем, как вы обычно взаимодействуете с объектом. Чтобы получить доступ к этим методам, они должны быть объявлены как public. Методы, объявленные как private, могут вызываться только другими методами внутри этого класса.

Есть несколько способов вызвать метод экземпляра в вашем коде. Это два очевидных факта, которые вы можете передать в $a в качестве параметра функции, или вы можете создать экземпляр класса A внутри вашего метода.

Чего вы на самом деле пытаетесь достичь?

1 голос
/ 18 августа 2011

Вы можете определить это так.

class A {
    public static function one() {
        echo "Class A";
    }
}

class B {
    function two() {
        echo "Class B";
        A::one();
    }
}


$a new A; 
$b = new B;

$b->two();
0 голосов
/ 18 августа 2011

Вы можете определить одно как статическое, но зачем вам это делать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...