Если у меня есть два класса 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();
На первый взгляд, вы можете это сделать. Однако функция one()
в классе A
должна быть объявлена как static
для вашей нотации вызовов. (Это делает метод класса .)
Другая альтернатива, предложенная последними строками вашего кода, предназначена для экземпляра $b
для вызова функции в экземпляре $a
. Такие функции называются методами экземпляра и как вы обычно взаимодействуете с объектом. Чтобы получить доступ к этим методам, они должны быть объявлены как public
. Методы, объявленные как private
могут быть вызваны другими методами внутри этого класса.
Существует несколько способов вызова метода экземпляра в вашем коде. Это очевидные два, которые вы можете передать в $a
в качестве параметра функции, или вы можете создать экземпляр класса A
внутри вашего метода.
Чего вы на самом деле пытаетесь достичь?
Вы можете определить его так.
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();
Вы можете определить ее как статическую, но зачем вы это делаете?