в методе text класса А объявляется объект класс B, который в свою очередь пытается использовать некоторые методы класса A, что в итоге пораждает ошибку.
Тут всё не так страшно как кажется с начала:
// Главный класс. Имеет все средства обработки
class A {
public $word = 'Слово';
// Поиск идентификатора скрипта и вызов метода замены идентификатора на скрипт
public function callback($item){
return preg_replace_callback("/{SCRIPT_(.+?);}/ui", array('A', 'code_replacement'), $code);
}
// Собственно, замена.
private function code_replacement($matches)
{
return $this->word; // Тут на самом деле происходит замена и нщё дополнительные действия, но для примера я просто возвращаю слово
}
// B - класс поиска записей в БД
public function text()
{
$text = new B(); // Объявляем объект
$text->getDBRecord(); // Ищем и достаём запись. По плану в объекте B произойдёт вызов A::callback()
}
}
class B {
public function getDBRecord()
{
// ...Выборка из БД
$row[0] = 'Вот последние 5 статей: {SCRIPT_GET_LAST_ARTICLES}'; // Например, достали вот такой текст.
return A::callback($row[0]); // ВОТ на этом месте и ошибка
}
}
$a = new A;
echo $a->text();
Итог работы программы:
Fatal error: Using $this when not in object context in ........ Речь идёт об ошибке в классе A. Ругает вызов $this->word;
Что я делаю не так? Расчитываю на вашу помощь. Спасибо
Спустя 2 часа, 31 минута, 27 секунд (14.01.2011 - 07:11) Hoodzon написал(а):
Посмотри эту работу, много чего для себя нового откроешь, а также исправишь свою ошибку.
http://phpforum.ru/index.php?showtopic=37524
http://phpforum.ru/index.php?showtopic=37524
Спустя 2 часа, 5 минут, 7 секунд (14.01.2011 - 09:16) linker написал(а):
Ну во-первых, метод callback() класса A не является статическим, поэтому вызов A::callback() неправомерен. Во-вторых, либо делать так
$text->getDBRecord($this);либо так
...
public function getDBRecord(A $Reference)
{
...
return $Reference->callback($row[0]);
}
class A
{
...
public function text()
{
$text = new B($this);
$text->getDBRecord();
}
}
class B
{
protected $Reference = null;
public function __construct(A $Ref)
{
$this->Reference = $Ref;
}
public function getDBRecord()
{
...
return $this->Reference->callback($row[0]);
}
}
Спустя 1 день, 18 часов, 56 минут, 55 секунд (16.01.2011 - 04:13) wolfandman написал(а):
Hoodzon, спасибо, посмотрю
linker, большое спасибо! Работает.
linker, большое спасибо! Работает.
_____________
Лучше быть, чем казаться