2013-09-23 13 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