PHP: $ this-> methodcall () выдает ошибку, а CalledClass: methodcall () работает нормально - PullRequest
0 голосов
/ 20 января 2010

Я пытаюсь вызвать метод getDetails() из другого класса, который, в свою очередь, вызывает методы из своего собственного класса (т. Е. Вызываемого класса) и делает это с помощью

$this->getAccount() и $this->getAddress() и в вызываемом классе у нас есть методы, такие как $this->getAccount() и $this->getAddress(), но когда я вызываю

их я получаю фатальное сообщение об ошибке как вызов неопределенного метода, но когда я пытаюсь вызвать этот метод, используя CalledClassName::getAddress() и

CalledClassName::getAddress() чем работает нормально.

Мой вопрос заключается в том, что вызывающий класс (то есть вызываемый класс) всегда будет использовать $this->getAddress() и $this->getAccount(), так как я получаю этот класс

информация от другой команды, и есть 3 команды, которые будут вызывать функции getDetails(), которые будут внутренне вызывать getAccount() и getAddress()

функции, и как мне решить проблему $ this на myside при вызове функции getDetails().

Пример кода

Calling Class:


CalledClass::getDetails() // Call to getDetails function in CalledClass


CalledClass::


public function postalAddress()
{
 return array(
   'addressId' => $address->addressId,
   'city' => $address->city,
   'country' => $address->country,
   'postcode' => $address->postcode,
   'stateOrProvince' => $address->stateOrProvince,
   'street' => $address->streetName,
   'streetNumber' => $address->streetNrFirst,
   'streetSuffix' => $address->streetNrFirstSuffix
  );
};

public function getAddress()
{
 return $this->postalAddress();
}

public function setAccount($account)
{
 $this->account = $account;
}

public function getAccount()
{
 return $this->find('account = 1311143','');
}



 public function getDetails()
    {

     $data = array();
     $data[$address] = $this->getAddress();
     $data[$account] = $this->getAccount();
     return $data;
    }

Так что теперь, используя вышеуказанный метод, он дает мне ошибку, и поэтому, если я использую CalledClass::getAddress() и CalledClass::getAccount(), и он работает нормально, но я не могу изменить код в вызываемом классе, так как вызываю эту функцию из другой команды.

Любые рекомендации или предложения?

1 Ответ

2 голосов
/ 20 января 2010

Если функция, которую вы пытаетесь вызвать из другого класса, это static , вам нужно использовать :: (оператор разрешения области видимости), чтобы вызвать ее. То же самое происходит и при попытке доступа к статическим свойствам.

Поскольку статические методы могут вызываться без экземпляра созданного объекта, псевдопеременная $ this недоступна в методе, объявленном как static.

Взято из PHP: статическое ключевое слово

В то же время, чтобы ваш вызов метода работал без возможности изменить код другого члена, используйте CalledClass::getAddress()

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