Отражение с использованием StdClass не будет работать. Вызов ReflectionClass()
, параметр один, использует ::class
экземпляра для определения его свойств. Поскольку StdClass не имеет свойств по умолчанию и задается динамически, Reflection не может найти никаких свойств, поскольку по умолчанию они не существуют.
Вы можете увидеть выше в демо . Тем не менее, для еще большей простоты это будет работать нормально:
var_dump(array_keys((array) new Foo('bar'))); # Based on above demo
Однако не паникуйте. Вам не нужно использовать отражение для этого: \PDO::FETCH_ASSOC
даст вам многомерный массив. Вы можете использовать array_keys()
, чтобы получить параметры. Затем позже, если вы предпочитаете использовать результат в качестве объекта, приведите массив в качестве объекта.
# Fetch Query
$this->stockList = $this->con->query($sql)->fetchAll(PDO::FETCH_ASSOC);
# Get properties which will be, in this case, ['id', 'symbol', 'date', 'quantity', 'bought', 'observed', 'dividendRate', 'exDividentDate', 'forwardDivident']
$properties = array_keys($this->stockList[0]);
# Revert all back to StdClass instances by casting the array to object
foreach($this->stockList as &$stockItem) {
$stockItem = (object) $stockItem;
}
Альтернативно, как предложено в комментариях @ Quasimodosclone . Вы можете использовать get_object_vars()
, который вернет массив, эквивалентный объекту. Затем, как и раньше, используйте array_keys()
для получения свойств.
$this->stockList = $this->con->query($sql)->fetchAll(PDO::FETCH_OBJ);
$properties = array_keys(get_object_vars($this->stockList[0]));
После проверки из любопытства объект может быть приведен к массиву для достижения большей простоты.
$this->stockList = $this->con->query($sql)->fetchAll(PDO::FETCH_OBJ);
$properties = array_keys( (array) $this->stockList[0] );