2012-06-15 134 views
-5

我确信这个问题有一个简单的答案,但对于我的生活,我找不到它。我使用PHP5,我试图改变一个类变量的值,但它似乎没有改变。例如,我有这样的东西:如何在PHP中更改类变量?

<?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是未定义的。我并没有将所有的代码都包含在内,因为我认为我只是误解了类变量是如何声明的。

+3

你已经包括了类,但不是代码调用类函数。你可以添加一个小片段,展示如何实例化foo并调用echoVariable()? –

+0

代码中有语法错误,例如__construct缺少开启花括号。我解决了它,并试图在我的本地服务器上,它运行良好,你没有运行代码时出现错误? – Ryan

+3

这是实际的代码?您的构造函数不会被PHP调用,因为关键字需要双下划线和圆括号('__construct()')。请显示**实际**代码。 – CodeCaster

回答

1

您有一个错字。使用__construct。两个(_ _)下划线。你的fooVariable永远不会被设置。它被设置后,它工作正常。

更新:您只在您的功能draw()方法中设置$this->yweightUser方法。如果您在ajax_post()或w/e之前没有拨打draw(),则不会被定义。

+1

另外,添加'(){':-P –

+0

对不起,这不是实际的代码。我用我的实际代码更新了这个问题。我只是觉得我没有完全理解如何声明类变量。 – thuey

+0

已更新的答案。 –

1

正如上面提到的,固定的语法errrors和它的作品,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();