-5

この質問には簡単な答えがあると思いますが、私の人生ではそれを見つけることができません。PHP5を使用していて、クラス変数の値を変更しようとしていますが、変更されていないようです。たとえば、私は次のようなものを持っています:

<?php

include_once "../includes/global.php";

loadDAOs('yweightGroups','yweightCourses','yweightUsers','user','yweightData');



class yweight {

private $header_includes;
private $user;
private $yweightUser;

//Description:
//  Constructor.
//Parameters:
//  -none-
//Returns:
//  -nothing-
function __construct() {
    global $r_action;
    global $r_page;

    $this->user = login_required(); 

    if(!$this->user || empty($this->user)){
        die();
        goHome();   
    }

    $this->header_includes = "";

    if(isset($r_action)) {
        $this->$r_action(); 
    }
    else if (isset($r_page)) {
        $this->$r_page();   
    }
    else {
        $this->draw();  
    }       
}

//Description:
//  Draws the YWeight page
//Parameters:
//  -none-
//Returns:
//  -nothing-
function draw() {
    global $r_page;     
    global $colorDAO;
    global $yweightUsersDAO;

    ob_start();
    ?>
    <script type='text/javascript' src="./yweight.js"></script>
    <link rel="stylesheet" type="text/css" href="yweight.css" />
    <?php

    $this->header_includes .= ob_get_clean();

    $col = $colorDAO->read(17);
    print_top("",$this->header_includes,"resources","",$col->value,$col->fontcolor);

    $users = $yweightUsersDAO->GetByUserID($this->user->id);

    if(!$users){
        echo "<div class='msg_failed'>You are not authorized to view this page.</div>";
        die();
    }

    $this->yweightUser = $users;
    echo serialize($this->yweightUser[0]);
    ?>
    <div id="yweight_area"></div>
    <script type='text/javascript'>
        <?php
        if($users[0]->yweightUsers_intern == 0)
            echo "drawPage('main_participant');";
        else
            echo "drawPage('main_intern');";
        ?>
    </script>
    <?php   
    print_bottom();
    echo ob_get_clean();

}           


//Description:
//  Draws the main intern page.
//Parameters:
//  -none-
//Returns:
//  -nothing-
function main_intern() {
    ob_start();
    echo "hello intern";
    echo ob_get_clean();
}

//Description:
//  Draws the main participant page.
//Parameters:
//  -none-
//Returns:
//  -nothing-
function main_participant() {
    global $yweightDataDAO;
    ob_start();
    $this->yweightUser = $this->yweightUser[0];
    echo serialize($this->yweightUser);
    ?>
    <div id="banner_div">
        <img class="banner" width="927" src="images/ParticipantsMain.jpg" />
        <img id="tracker_btn" class="std_btn" src="images/trackerButton.png" />
        <img id="summary_btn" class="std_btn" src="images/summaryButton.png" />
        <img id="requirements_btn" class="std_btn" src="images/reqButton.png" />
    </div>
    <div id="discussion_board_input_div">
        <textarea id="discussion_board_input" />
        <?php
        echo build_btn("green",100,25,"Submit","","","","",
            'submit_post()',"margin-top:5px; margin-bottom:5px; float:right;");
        ?>
    <div class="clear_floats" />
    </div>
    <div id="discussion_board_div">

    </div>
    <?php
    echo ob_get_clean();
}

function submit_post(){
    global $yweightDataDAO;
    global $userDAO;
    global $r_post;
    echo serialize($this->yweightUser);
    $userDataID = $yweightDataDAO->GetByUserID($this->yweightUser->user_id);

    if($userDataID){
        $userData = $yweightDataDAO->read($userDataID);
        $userDiscussion = unserialize($userData->yweightData_discussionBoard);
    }

    $userDiscussion[$this->user->firstName .  time()] = $r_post;

    $userData->yweightData_discussionBoard = serialize($userDiscussion);

    $yweightDataDAO->save($userData);
}

}


$recs = new yweight();

?>

submit_post()は、関数と呼ばれるajaxです。私が得ているエラーは、$this->yweightUserが未定義であると言っていることです。クラス変数がどのように宣言されているかを誤解しているだけだと思ったので、元々すべてのコードを含めていませんでした。

4

2 に答える 2

1

タイプミスがあります。を使用し__constructます。2つの(_ _)アンダースコア。あなたfooVariableは決して設定されていません。設定後は正常に動作します。

更新:$this->yweightUser関数draw()メソッドでのみ設定します。draw()以前ajax_post()またはw/eに電話をかけなかった場合、それは定義されません。

于 2012-06-15T15:29:00.453 に答える
1

上記のように、構文エラーを修正すると機能します。コンストラクターには2つのアンダースコア、コンストラクターには左中括弧、引数には括弧があります。

  class foo {

protected $fooVariable;

function __construct () {
  $this->fooVariable = "hello world";
  $this->changeVariable();
}

function changeVariable(){
  $this->fooVariable = "goodbye world";
  $this->echoVariable();
}

function echoVariable(){
  echo $this->fooVariable;
}
}

$foo = new foo();
于 2012-06-15T15:30:10.977 に答える