2009-08-12 2 views
0

PHP 스크립트 :

$compareUser = new User(); 
    $user = new User; 

verify.php가

User.php

setActive($token, $uid){ 
    $this->username = /???? 
} 
(register.php에서 링크로 실행은 User.php 두 변수를 전달)

* User에 username 속성이 있다고 가정하면 User 클래스의 인스턴스에 $가 사용됩니까? $ compareUser 또는 $ user?

답변

4

전적으로 setActive()를 호출하는 개체에 따라 다릅니다. 당신은 단순히 당신은이 두 가지 중 하나를 작성해야 ...

setActive('foo', 'bar'); 

쓸 수 없습니다 : 어느 경우

$compareUser->setActive('foo', 'bar'); 
$user->setActive('foo', 'bar'); 

, 그 메소드를 호출하는 데 사용되는 개체 중 $this입니다. 사실, 변수의 정확한 목적은 변수입니다.

2
class User { 
    var $username; 
    function User($name) { 
    $this->username = $name; 
    } 
    function setActive($token, $uid) { 
    echo $this->username; 
    } 
} 

$user1 = new User('tom'); 
$user2 = new User('sally'); 

$user1->setActive(1, 2); // tom 
$user2->setActive(1, 2); // sally 

setActive가 위와 같이 클래스 정의에 정의되어 있는지 확인하십시오. 바라기를 위와 같이하면 물건을 정리하는 데 도움이되기를 바랍니다.

0

은 상황에 맞는 코드이며 항상 코드가 실행되는 현재 컨텍스트를 참조합니다.

(정적이 아닌) 클래스 메서드 내에서 호출하지 않는 한 $this을 참조 할 수 없습니다. 이 경우 $this은 런타임에 해당 메서드를 호출 한 클래스 인스턴스를 참조합니다.

0

"무엇을 지정하지 않고"초기 질문에 부분이 잘못되었습니다.

예에서 알 수 있듯이 : "지정되지 않은"$this을 사용할 수 없습니다. 이는 해당 클래스의 특정 인스턴스 내에서 항상 호출되기 때문입니다.

내 댓글 설명하기 위해 편집 :

class Foo 
{ 
    protected $var; 

    function _construct($var) 
    { 
    $this->var = $var; 
    } 

    function echoVar() 
    { 
    // Works since it's within a class and points to an instance's variable: 
    echo $this->var; 
    } 
} 

$first = new Foo('first'); 
$second = new Foo('second'); 

// These will work: 
$first->echoVar(); 
$second->echoVar(); 

// This won't. What's it supposed to show? 
$this->echoVar(); 
+0

흠을 ... 내 나쁜 ... 어쩌면 내가 무엇을 말하려고하고있어이 점을 $ 무슨 런타임에 클래스의 두 인스턴스가있을 때입니다 에? 최신 신고 된 권리일까요? –

+0

아니요. 그래도 이것은 틀린 부분입니다. 특정 인스턴스에서 $ this를 사용하여 항상 (다른 작업을 수행 할 수는 없습니다)! $ this를 사용하여 외부에서 하나의 인스턴스 (또는 여러 인스턴스)를 참조 할 수 없습니다. 따라서 $ this는 인스턴스를 "선택"하지 않아도됩니다. –

관련 문제