У меня небольшая проблема с возвратом значения метода php.
в функции работает, как я хочу, но когда я пытаюсь создать класс и надлежащие методы, я могу вернуть значение правильно.
если я использую эту функцию и называю ее, то результат — то, что я хочу:
function InsertData($table, array $data){
$connection = DataBaseConnection();
$row = implode(", ", array_keys($data));
$column = "'".implode("', '", array_values($data))."' ";
$sql = "INSERT INTO {$table} ( $row ) VALUES ( $column )";
if($connection->query($sql) === FALSE){
return "Error: " . $connection->error; // return the error
}else{
return True; // return true
}}
Я называю функцию таким образом, и работает нормально. retrun true, если данные вставлены, и «ERROR + error msg», если существует ошибка.
$result = InsertData( 'table', $data_array);
но я хочу поместить каждый элемент базы данных в класс, и у класса есть соответствующие методы. Я новый разработчик в php oop, и у меня есть проблема. Я могу вернуть те же значения моей предыдущей функции в моем соответствующем методе класса
class dba{
public function conn{
/*some code*/ return $conn; //
}
public function DBA_Insert($table, array $data) {
$conn = $this->Conn() ;
$row = implode(", ", array_keys($data));
$column = "'".implode("', '", array_values($data))."' ";
$sql = "INSERT INTO {$table} ( $row ) VALUES ( $column )";
if($conn->query($sql) === FALSE){
return "Error: " . $conn->error;
// это возвращает объект, и я хочу повторить строку ERROR + Error
MSG, как в моей функции
}else{
return true;
// ничего не возвращаю, но данные вставляются в базу данных, и я не хочу возвращать true для использования на другой стороне приложения
}
$conn->close();
}
чтобы вызвать класс и метод следующим образом:
$insertMsg = new dba();
$insertMsg->DBA_Insert( 'messages', $data);
если вы можете помочь мне, я ценю.
Спасибо за ваше время 😉
`
Как вы звоните DBA_Insert
Метод показывает, что вы не присваиваете возвращаемое значение.
$insertMsg
это просто экземпляр объекта (переменная, которая содержит указатель / ссылку) dba
класс, и вы вызываете один из его методов. С правильными именами ваш код должен выглядеть так:
$dba = new dba();
$result = $dba->insert(...);
Я также изменил имя метода, потому что оно всегда будет принадлежать объектам класса dba, а имя переменной вашего экземпляра также должно быть самоочевидным.
Других решений пока нет …