php - PHP MongoDB\Model\BSONDocument 不进行反射
问题描述
有人可以解释一下为什么我的 PHP 代码无法反映 MongoDB\Model\BSONDocument 吗?有一条线elseif(is_object($var))
可以正确捕获对象但没有任何属性。其他 PHP 对象已正确记录。也是一个私有和受保护的值。为什么 BSONDocument 不能?
function varLog( $var, $log = 'info', $deph = 2, $round = 0)
{
$logFile = __DIR__ . '/../log/' . $log . '.log';
file_put_contents( $logFile, '(' . gettype( $var ) . ') ', FILE_APPEND );
if( in_array( gettype($var), ['integer', 'double', 'string'] ) )
{
file_put_contents( $logFile, $var . PHP_EOL, FILE_APPEND );
}
elseif( in_array( gettype($var), ['boolean', 'NULL'] ) )
{
$var = is_null( $var ) ? 'NULL' : ($var ? 'TRUE' : 'FALSE');
file_put_contents( $logFile, $var . PHP_EOL, FILE_APPEND );
}
elseif ( is_array( $var ) )
{
file_put_contents( $logFile, 'length ' . count($var) . PHP_EOL, FILE_APPEND );
foreach ( $var as $key => $val )
{
file_put_contents( $logFile, str_repeat(' ', $round + 1) . $key . ' => ', FILE_APPEND );
if ( $round + 1 <= $deph )
{
varLog( $val, $log, $deph, $round + 1 );
}
else
{
file_put_contents( $logFile, '(' . gettype( $val ) . ')' . PHP_EOL, FILE_APPEND );
}
}
}
elseif ( is_object( $var ) )
{
file_put_contents( $logFile, get_class( $var ) . PHP_EOL, FILE_APPEND );
$props = (new ReflectionClass( $var ))->getProperties();
foreach ( $props as $prop )
{
$prop->setAccessible( true );
$scoope = $prop->isPrivate() ? '(private)' : ($prop->isProtected() ? '(protected)' : '(public)');
file_put_contents( $logFile, str_repeat(' ', $round + 1) . $scoope . ' ' . $prop->name . ' => ', FILE_APPEND );
if ( $round + 1 <= $deph )
{
varLog( $prop->getValue( $var ), $log, $deph, $round + 1 );
}
else
{
file_put_contents( $logFile, '(' . gettype( $prop->getValue( $var ) ) . ')' . PHP_EOL, FILE_APPEND );
}
}
}
}
解决方案
推荐阅读
- java - 垂直 recyclerView 和 Horizontal recyclerview 一起滚动
- python - 计算熊猫行上的连续零
- regex - 查找字符串中是否存在反斜杠 Go
- angular - *ngFor orderby 计算属性的可观察列表
- highcharts - 始终在第一个可见点上显示数据标签
- python - Mypy:有什么方法可以实现“SelfType”TypeVar?
- regex - 用于验证 rewriteMap 中的 URL 的正则表达式
- python - 如何修复:ImportError:无法导入名称 TwitterRestPager
- parameters - 如何通过提示设置全局变量的名称?
- android - StatementWithEmptyBody 的目的是什么?