如何从tool_courserating\local\models\rating对象获取数据及遍历数组?
获取Rating对象中的值及数组遍历方法
一、获取rating值的正确方式
你当前用(object)强制转换get_record的返回值是多余的,因为get_record本身返回的就是tool_courserating\local\models\rating对象。这类继承自Moodle core\persistent的类,提供了标准的取值方法,无需直接访问私有属性:
推荐方法:使用类的get()方法
直接调用对象的get()方法并传入字段名即可:
$rating = tool_courserating\local\models\rating::get_record(['courseid' => $courseData->id]); $ratingValue = $rating->get('rating'); // 拿到rating值4 echo $ratingValue;
不推荐的私有属性访问方式(仅作参考)
由于data是私有属性,正常语法无法直接访问。如果非要绕过封装(不建议,易受版本更新影响),可通过反射实现:
$reflection = new ReflectionClass($rating); $dataProperty = $reflection->getProperty('data'); $dataProperty->setAccessible(true); $dataArray = $dataProperty->getValue($rating); $ratingValue = $dataArray['rating'];
二、数组的foreach遍历方法
如果通过get_records()获取多条评分记录的数组,分两种场景处理:
遍历rating对象数组
遍历每个对象并调用get()方法取值:
$ratings = tool_courserating\local\models\rating::get_records(['courseid' => $courseData->id]); foreach ($ratings as $ratingId => $ratingObj) { $ratingValue = $ratingObj->get('rating'); $userId = $ratingObj->get('userid'); echo "用户ID{$userId}的评分是{$ratingValue}\n"; }
遍历纯数据数组
利用persistent类的to_array()方法,将对象转为字段数组后遍历:
$ratings = tool_courserating\local\models\rating::get_records(['courseid' => $courseData->id]); foreach ($ratings as $ratingObj) { $dataArray = $ratingObj->to_array(); foreach ($dataArray as $key => $value) { echo "{$key}: {$value}\n"; } }
内容的提问来源于stack exchange,提问作者Farhood Naqizade
相关产品推荐
相关产品推荐

