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->.
Есть ли способ, что я мог бы использовать одни и те же переменные класса как с объектом и без контекстов объекта?
Я думаю, что вы могли бы сохранить метод статичным, но если вы редактируете существующий объект, вам придется передать фактический экземпляр того же класса в метод в качестве необязательного второго параметра, который будет использоваться, когда $ 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);
Других решений пока нет …