0

php5.2.5MySQLデータベースからcourseidでモジュールを取得する関数を作成しました。

function getModules($courses, $mod) {
global $DB;
$result = array();
foreach ($courses as $value) {
    $value->mods = array();
    $value->count = 0;
    $temp = $DB->get_records_sql("
        SELECT q.*, cm.idnumber as cmidnumber, q.course as courseid
        FROM {modules} m
        JOIN {course_modules} cm ON m.id = cm.module
        JOIN {".$mod."} q ON cm.instance = q.id
        WHERE m.name = '".$mod."' AND cm.course = ?", array($value->id)); 
    foreach ($temp as $vS) {
        $value->mods[] = $vS;
        $value->count++;
    }
    $result[] = $value;
}  
return $result;
}

いくつかのタイプのモジュールを取得してみてください(to_debugはvar_dumpに関する一種のラッパーです)

$learningScorm = getModules($learning, 'scorm');
to_debug($learningScorm);  // in debug I can see right values.
echo '<br><br><br>';
$learningLesson = getModules($learning, 'lesson');
to_debug($learningScorm);// in debug I see what value of $learningScorm is replaced by value of $learningLesson
$testingQuiz = getModules($testing, 'quiz');
$labAssignment = getModules($lab, 'assignment');

なぜこの置き換えが行われているのか理解できません。そのような動作についてのヒントがあれば、教えてください。

これらの行にコメントすると

$value->mods = array();
$value->count = 0;

次に、$learningScormは$learningScormと$learningLessonからのモジュールを合計しています。どうやら...関数O_Oの間に$coursesがローカルではないようです。もう何を考えたらいいのかわからない。

4

2 に答える 2

0

getModules は参照を返しますか? その場合、両方の変数が同じ情報を指している可能性があります。起こりうることの単純化された例:

var $global = 'x';

function getModules($a){
  global $global;
  $global = $a;
  return &$global;
}

// $a becomes 'foo', or actually a reference to $global, which now 
// has the value 'foo'
$a = getModules('foo'); 

// $b also is a reference to $global, which now has the value 'bar'. 
// Therefor, both $a and $b will show the value 'bar.
$b = getModules('bar');
于 2012-11-01T07:17:22.223 に答える
0

$courses はローカルですが、$courses に含まれるオブジェクトは実際のオブジェクトです。$value の実際の項目を変更することで、変更も行われます。

于 2012-11-02T08:10:01.440 に答える