Ссылка на переменную статической функции класса в переполнении стека

PHP 7.

Я пытаюсь использовать один и тот же метод класса в разных ситуациях. Первый раз, когда пользователь создает новую запись в базе данных, и я рисую страницу администратора с пустыми значениями. Он был создан следующим образом.

$classname::drawAdmin(FALSE);

$ classname — это переменная, так как я заранее не знаю, какие классы будут использоваться на веб-странице (Ikr?), и я должен получить ее из базы данных.

Внутри метода он проверяет, создает ли он новый объект или повторно использует существующий.

static function drawAdmin( $mod = FALSE ) {
print 'Technology<input type="text" name="technology" value="'.($mod?$this->technology:"").'" /><br />';
etc...
}

Он хорошо работает при создании новой записи, проверьте, пытается ли он изменить, если нет, создайте вход без значения, иначе он записывает данные об объектах в значения.

Однако это не работает, когда я создаю новый объект и пытаюсь изменить его данные.

$class = new $row['class_name']($_GET['id']);
$class->drawAdmin(TRUE);

(Конструктор класса очищает массив $ _GET.)

В этом случае я получаю сообщение об ошибке:

Fatal error: Using $this when not in object context in [censored]/class.phone.php on line 932

даже если объект был создан правильно и существует (проверяется с помощью var_dump).

Ха-ха, шутки надо мной, это статический метод, поэтому я не могу использовать $ this! Однако, когда я изменяю печать на:

static function drawAdmin( $mod = FALSE ) {
print 'Technology<input type="text" name="technology" value="'.($mod?self::technology:"").'" /><br />';
etc...
}

Я все еще получаю сообщение об ошибке:

Fatal error: Undefined class constant 'technology' in [censored]/class.phone.php on line 932

и если я добавлю (защищенные) переменные в static, я больше не смогу использовать их с $ this->.

Есть ли способ, что я мог бы использовать одни и те же переменные класса как с объектом и без контекстов объекта?

0

Решение

Я думаю, что вы могли бы сохранить метод статичным, но если вы редактируете существующий объект, вам придется передать фактический экземпляр того же класса в метод в качестве необязательного второго параметра, который будет использоваться, когда $ mod имеет значение true, и затем используйте значение «технологии» из этого экземпляра.

Например:

static fuction drawAdmin($mod=FALSE, $class=NULL) {
print 'Technology<input type="text" name="technology" value="'.($mod?$class->getTechnology():"").'" /><br />';
}

и затем в случае, если это модификация, назовите это так:

$class->drawAdmin(TRUE, $class);
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector