사람들은 일반적으로 mysqli 결과를 객체로 어떻게 바꾸나요?
사용자 정의 클래스를 사용할 때 fetch_object ()로 예제를 찾을 수 없습니다. 다음 설정을 가정합니다.
class Test1 {
function __construct(array $data) { ... }
}
class Test2 {
function __construct(array $data) { ... }
}
동일한 생성자를 가진 여러 클래스가 있다고 가정하면 이러한 클래스를 어떻게 동적으로 인스턴스화 할 수 있습니까?
나는 다음과 같은 것을 상상할 것입니다.
function customQuery($query, $class) {
// Get some data by mysqli query, assume we get the data as $result object
...
// Now I would like to store the data in an array with instances of $class
$array = array();
while ($obj = $result->fetch_object($class, ???) {
$array[] = $obj;
}
// Return the array with instances of $class
return $array;
}
내 물음표에 대한 주장으로 무엇을 사용합니까? 나는 Test1과 Test2의 두 클래스 생성자가 연관 배열을 입력으로 원한다는 것만 알고 있습니다 (아마도 같은 길이가 아닙니다!).
결국 나는 단순히 다음과 같은 것을하고 싶습니다.
$arr1 = customQuery('SELECT id, product FROM test1 LIMIT 10', 'Test1');
$arr2 = customQuery('SELECT id, name, address FROM test2 LIMIT 10', 'Test2');
물론 제 목표를 달성하기위한 더 나은 아이디어가 있다면 여러분의 의견에 감사드립니다.
해결 방법
"fetch_object"살펴보기
$ class_name 인수가 있습니다.
문서에서 : 인스턴스화하고 속성을 설정하고 반환 할 클래스의 이름입니다. 지정하지 않으면 stdClass 객체가 반환됩니다.
주어진 클래스의 인스턴스를 자동으로 생성하고 속성을 설정합니다. 그래서 배열을 전달할 필요가 없습니다
좀 더 설명,
fetch_object는 개인 속성 등을 채 웁니다 (PHP Magic ... 나는 그것을 좋아하지 않습니다).
객체에 생성자에 필요한 매개 변수가 있지만 데이터베이스에서 가져 오려는 경우 fetch_object를 사용하면 생성자에 대한 인수를 정의하여 경고 / 오류를 발생시키는 대신 생성 할 수 있습니다.
class Test {
private $title;
public function __construct($required) {
}
}
$mysql->fetch_object('Test'); //will trigger errors/warnings
$mysql->fetch_object('Test', array(null)); //won't
당신이 할 수있는 것은 simpel 배열을 가져오고 객체를 구성하는 것입니다.
function query($query, $class) {
$data = $query->fetch_assoc();
$instance = new $class($data);
return $instance;
}
참조 페이지 https://stackoverflow.com/questions/17362039
'MySql' 카테고리의 다른 글
MySQL MAMP에서 대용량 데이터베이스를 내보내거나 가져 오는 방법 (0) | 2020.12.30 |
---|---|
MySQL How to group by week in MySQL? (0) | 2020.12.30 |
MySQL Codeigniter Controller / MySQL 내에서 테이블 데이터 업데이트 (0) | 2020.12.30 |
MySQL 지난 24 시간 동안의 날짜가있는 레코드 선택 (0) | 2020.12.30 |
MySQL PhpMyAdmin 로그인 화면 (0) | 2020.12.30 |
댓글