Вот мой упрощенный код
<?php
$database = new db();
$file = new file();
$input = new input();
$output = new output();
$data = "SELECT * FROM table;";
$input->page($data);
class db {
public function queryExecute($var) {
$var = $this->queryEncode($var);
$var = $this->querySubmit($var);
return $var;
}
public function queryEncode($var) {
// Do somthing
return $var;
}
public function querySubmit($var) {
// Do somthing
return $var;
}
}
Проблема в том, когда я добавляю это к коду:
class input {
public function page($data) {
// Do something
$pageQuery = db::queryExecute($data);
}
}
С этим я должен сделать две вещи. Во-первых, я должен скрыть ошибки для кода db::queryExecute($data);
, если для сервера установлен строгий режим. А теперь о второй проблеме. Кажется, я не могу использовать эту строку кода (это единственный способ, который я пока нашел возможным для ссылки на другие классы, кроме использования Abstract), если ссылающийся класс ссылается на еще один класс, но на этот раз в своем собственном классе.
Для лучшего объяснения, процедура выглядит следующим образом:
- Возьмите переменную
$data
и отправьте ее в функцию $input->page()
($input->page($data)
).
- Ссылаясь на класс
db
, функция $input->page()
отправляет информацию в функцию $database->queryExecute()
с помощью формата db::queryExecute()
(db::queryExecute($data)
).
- Но поскольку мы используем
::
, когда $database->queryExecute()
ссылается $database->queryEncode()
и $database->querySubmit()
с использованием оператора $this->
($this->queryEncode()
и $this->querySubmit()
), $this->
в настоящее время принадлежит $input->
и не $database->
.
Так в чем же решение ... По-другому ссылаться на другой класс (вместо ::
)? Использовать переменную $_GLOBAL
при определении моих классов? Использовать что-то кроме $this->
? Настройте все классы для использования ABSTRACT
/ EXTENDS
(или INTERFACE
)?
Следующая выведенная ошибка относится к $var = $this->queryEncode($var);
:
Fatal error: Call to undefined method input::querySubmit() in C:\[...]\global.php on line 12