2013-09-23 2 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(); 

나는 이것이 악하다고 들었으므로 거기서 "글로벌"을 사용하는 것을 피하고 싶습니다.

그리고 showLogin ($ user)처럼 $ user를 showLogin()에 전달하고 싶지 않습니다. 이 아주 간단한 경우에는 의미가 있지만, 이렇게 많은 배열을 그리는 매우 복잡한 함수를 수행 할 때마다 모든 배열을 전달하지 않아도됩니다.

+3

이것은 더 간단한 캐주얼 배열입니다. 배열에 대한 래퍼를 만들었습니다. 그리고 또 잘못 했어. :) 당신은 __set과 __get과 같은 마법 방법을 사용합니다. –

+1

오류를 게시하면 도움을받을 수있는 좋은 곳이 될 것입니다 ... – JRizz

+0

어쩌면 내가 누락되었지만 왜 세션 변수를 사용하지 않습니까? 세션에 사용자 정보를 저장하십시오. –

답변

0

당신은 속성에 액세스하려면 당신이 클래스 또한 $instance = new user();

의 인스턴스를 가질 필요가 값

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

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

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

} 모든

+0

Donald, 사용자 배열에 대해 변수를 호출하는 방법을 보여줄 수 있습니까? 내가 그 일을 제대로하고 있었나요?user-> showValue ('firstname') – rgbflawed

+0

User 클래스의 인스턴스 ('$ someUser = new user();')를 만들면 다음과 같이 사용할 수 있습니다 :'$ someUser-> showValue ('firstname'); ' –

1

먼저 설정으로 $ 사용자를 호출해야 귀하가 사용해야하는 수업의 구성원 $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

관련 문제