2013-09-23 50 views
0

我拼命地學習如何使用PHP中的類。我試圖做一個簡單的類來複制存儲用戶信息的壞習慣,作爲一個數組,我將首先將它設置爲「全局」,然後用於函數。簡單的php類來存儲用戶信息

下面是我做這個類非常笨拙的嘗試。它不起作用的原因有100個。你能修好它嗎?

class user{ 
    private $user; 
    function __construct(){ 
     $user=/*some SQL to create a $user array. Assume one pair is 'firstname'=>'Brian'*/ 
    } 

    function showValue($key) { 
     echo $user[$key]; 
    } 

    function changeValue($key,$newValue) { 
     $user[$key]=$newValue; 
    } 
} 

echo "Hello there ".user->showValue('firstname')."!"; //should echo: Hello there Brian! 

user->changeValue('firstname',"Steven"); 
echo "Now your name is ".user->showValue('firstname'); //should echo: Now your name is Steven 

//the same class needs to work inside a function too 
function showLogin() { 
    echo "Logged in as ".user->showValue('firstname'); 
} 
showLogin(); //Should echo: Logged in as Steven 

UPDATE

爲什麼我不想這樣做,因爲數組不再的原因是因爲我經常不得不使用數組內的功能是這樣的:

function showLogin() { 
    global $user; 
    echo "Logged in as ".$user['firstname']; 
} 
showLogin(); 

我想避免使用那裏的「全球」,因爲我被告知這是邪惡的。

而且我不想通過$ user將showLogin()傳遞給showLogin($ user)。在這個非常簡單的情況下,它是有道理的,但是當我做很複雜的函數來繪製像這樣的很多數組時,我不想讓每個數組都通過。

+3

這比一個簡單的休閒陣列更糟糕。你爲數組做了一個包裝。而且你做錯了方式。 :)你有像__set和__get這樣的魔術方法。 –

+1

發佈你得到的錯誤將是一個很好的開始尋求幫助的地方... – JRizz

+0

也許我錯過了一些東西,但爲什麼你不使用會話變量?將用戶信息存儲在會話中。 –

回答

0

你必須調用$用戶的屬性以設置的值

class user{ 
    private $user; 
    function __construct(){ 
     $this->user= .... 
    } 

function showValue($key) { 
    echo $this->user[$key]; 
} 

function changeValue($key,$newValue) { 
    $this->user[$key]=$newValue; 
} 

}

+0

唐納德,你能告訴我怎麼接着調用用戶數組的變量嗎?我做得對的方式是否正確?user-> showValue('firstname') – rgbflawed

+0

你必須創建一個User類的實例('$ someUser = new user();'),你可以像這樣使用它:'$ someUser-> showValue('firstname' );' –

1

首先你需要有類$instance = new user();

同樣的實例來訪問您需要使用的課程中的成員$this->

您的代碼應如下所示:

class user{ 
    private $user; 
    function __construct(){ 
     $this->user=/*some SQL to create a $user array. Assume one pair is 'firstname'=>'Brian'*/ 
    } 

    function showValue($key) { 
     echo $this->user[$key]; 
    } 

    function changeValue($key,$newValue) { 
     $this->user[$key]=$newValue; 
    } 
} 

$instance = new user(); 

echo "Hello there ".$instance->showValue('firstname')."!"; //should echo: Hello there Brian! 

$instance->changeValue('firstname',"Steven"); 
echo "Now your name is ".$instance->showValue('firstname'); //should echo: Now your name is Steven 

//the same class needs to work inside a function too 
function showLogin() { 
    echo "Logged in as ".$instance->showValue('firstname'); 
} 
showLogin(); //Should echo: Logged in as Steven 
+0

我得到一個錯誤,說不應該有一個[在$ this-> user - > [$ key] – rgbflawed

+0

我讓它變成了$ this-> user - > $ key,現在得到一個錯誤「Call to showLogin()函數內的一個非對象成員函數showValue()。 – rgbflawed

+0

對不起,我修復了代碼。它應該是'$ this-> user [$ key];' – smerlung